(PTA) 7-8 寻找最大素数 输入一个整数,找出其中由N(N>=1)个连续数字组成的最大素数,如果找不到素数,则输出None(上)

输入格式:

输入1个正整数。

输出格式:

输出最大素数。

 输入样例1:

出样例1:

 

输入样例2:

 

输出样例2:

 

算法解析:

     分析:       

          作为我们成都信息工程大学自己出的题目,这一道寻找最大素数可以说是对新手不太友好了,看似是考研素数算法,数组运用,其实是一道对于高精度的考察,还有核心算法的逻辑,都比较复杂。

     思路:

1.将数字转化成字符;

2,考点:数组与高精度;

C语言代码:

#include<stdio.h>
int a[1000000];
int tmp[1000000];
char A[10000000];//声明数组为全局量

int is_primer(int n);//声明素数判断函数

int main(void)
{

	scanf("%s",A);//先将字符转换为数字,并且倒序存入int类型数组中
	int i = 0;
	int cnt1 = 0;
	
	while (A[i] != '\0')//计算A[]中存储数据的长度:cnt1对应A的长度;
	{
		cnt1++;
		i++;
	}
	
	for(int i=cnt1-1,j=0;i>=0;i--,j++)//双变量将存入的数字符号再转化为数字
	{
		a[j]=A[i]-'0';
	}
	
	int num=0;//num为每一位数字具体表示
	int count1=0;
	int count=0;
	
	for(int i=cnt1-1;i>=0;i--)//cnt1对应A[]的长度
		{
			num=a[i];
			for(int j=i-1;j>=0;j--)
				{
					if(is_primer(num)==1)//如果是素数
						{
							tmp[count++]=num;
							count1++;
						}
					num=num*10+a[j];
				}
			if(is_primer(num)==0)
				{
					;
				}
			else
				{
					tmp[count++] = num;
					count1++;
				}
		}
	
	int max = 0;//声明标志变量,即可作为擂台数,亦可以作为标志,检测是否有素数
	for(int i=0;i<count1;i++)
		{
			if(tmp[i]>max)
			{
				max = tmp[i];
			}
		}
//开始max的判定,输出最后结果
	
	if(max!=0)
		{
			printf("%d", max);
		}
	else
		{
			printf("None");
		}
	
	return 0;
}


int is_primer(int n)
{
	if(n<2)
		return 0;
	else
	{
		for(int i=2;i*i<=n;i++)
		{
			if (n % i == 0)
				return 0;
		}
	}
	return 1;
}

运行截图:

 

 

 

结语:

      这个寻找最大素数的程序核心算法不是Void个人写的,特别感AkieMo大佬提供的帮助

AkieMoicon-default.png?t=M85Bhttps://me.csdn.net/AkieMo其实整段代码中间的核心算法有些细节Void自己也不是太懂,就没有太多的注解了,往后继续学习搞懂了,Void会补上下篇对核心算法的理解。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MVaker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值