输入格式:
输入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大佬提供的帮助
AkieMohttps://me.csdn.net/AkieMo其实整段代码中间的核心算法有些细节Void自己也不是太懂,就没有太多的注解了,往后继续学习搞懂了,Void会补上下篇对核心算法的理解。