C语言求超级素数

C语言求超级素数超级素数是指一个素数依次从低位去掉一位、两位、……所得的数依然是素数。如239就是超级素数。试
编写程序求100-9999之内:
(1) 打印出所有的超级素数;
(2) 超级素数的个数;
(3) 最大的超级素数。
提示: 编写一个函数,实现对素数的判断。

给你个完整的:

#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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-13
#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; 
}

运行结果:

这个代码没有问题,只是时效略差点。

第2个回答  2017-12-13

不考虑时间的需求,就用最简单的素数判断函数了

#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;
}

本回答被提问者采纳