C语言求超级素数
发布网友
发布时间:2022-10-05 15:28
我来回答
共3个回答
热心网友
时间:2023-10-19 12:18
给你个完整的:
#include<stdio.h>
int isprim(int n)
{
int i;
if (n<2) return 0;
for (i=2; i*i<=n; ++i)
if (n%i==0) return 0;
return 1;
}
int isssp(int n)
{
if (!isprim(n)) return 0;
while (n/10)
if (!isprim(n/=10))return 0;
return 1;
}
int main()
{
int i;
int cnt=0;
int maxp;
printf("从100-9999的超级素数有:\n");
for (i=100; i<10000; ++i)
{
if (isssp(i))
{
++cnt;
maxp=i;
printf("%8d", i);
if (cnt%5==0)
printf("\n");
}
}
printf("\n总共有:%d个\n", cnt);
printf("最大的是:%d\n", maxp);
return 0;
}
热心网友
时间:2023-10-19 12:18
#include "stdio.h"
int superprime(int n){
int i;
if(n>2 && !(n&1) || n<2)
return 0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return 0;
return 1;
}
int main(int argv,char *argc[]){
int n,s,t,mp;
for(mp=s=0,n=7999;n>100;n-=2)
if(superprime(t=n)){
while(t>0 && superprime(t/=10));
if(t==0){
printf("%5d",n);
if(s++==0)
mp=n;
}
}
printf("\n\nA total of %d.\nThe MAX is %d.\n",s,mp);
return 0;
}
运行结果:
这个代码没有问题,只是时效略差点。
热心网友
时间:2023-10-19 12:19
不考虑时间的需求,就用最简单的素数判断函数了
#include <stdio.h>
#include <math.h>
#include <string.h>
bool isPrime(int n)
{
for(int i = 2; i <= sqrt(n); ++i)
{
if(n%i == 0)
return false;
}
return true;
}
int main()
{
int maxprime = 0, count = 0;
for(int i = 101; i < 10000; i+=2)
{
int temp = i;
bool flag = true;
while(temp)
{
if(isPrime(temp))
{
temp /= 10;
continue;
}
else
{
flag = false;
break;
}
}
if(flag)
{
count++;
maxprime = i;
printf("%4d ", i);
if(count%5 == 0)
putchar('\n');
}
}
printf("\n\n超级素数个数 = %d,最大超级素数 = %4d\n", count, maxprime);
return 0;
}