C语言编写超级素数

Python010

C语言编写超级素数,第1张

超级素数是指从个位起删除0位、1位、2位……直到只剩最后1位都是素数的十进制正整数。可以自定义一个素数判断函数,对某一正整数n及从个位起每删除1位的新数逐一进行判断,都是素数的则是题解。以下代码先要求输入正整数n,输出2~n之间的所有超级素数:

#include "stdio.h"

int prime(int n){//判断素数,素数返回0,否则返回1

int i

if(n>2 && !(n&1) || n<2)

return 1

for(i=3i*i<=ni+=2)

if(!(n%i))

return 1

return 0

}

int main(int argc,char *argv[]){

int n,i,t

printf("Input n(int n>1)...\nn=")

if(scanf("%d",&n)!=1 || n<2){

printf("Input error, exit...\n")

return 0

}

for(i=2i<=ni++){

for(t=itt/=10)//从低位删除0位,1位...直到只剩1位都是素数的为超级素数

if(prime(t))

break

if(!t)

printf("%d ",i)

}

printf("\n")

return 0

}

运行样例如下:

给你个完整的:

#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

}

#include <stdio.h>

int prime(int n)

{

    int i

    if (n == 1)

        return 0

    for (i = 2 i * i <= n i++)

        if (n % i == 0)

            return 0

    return 1

}

int super_prime(int n)

{

    do {

        if (!prime(n))

            return 0

    } while (n /= 10)

    return 1

}

int main(void)

{

    int i

    int count = 0, sum = 0, max = 0

    for (i = 101 i < 10000 i++) {

        if (super_prime(i)) {

            count++

            sum += i

            max = i

            printf("%d\n", i)

        }

    }

    printf("sum=%d, count=%d, max=%d\n", sum, count, max)

    return 0

}

因为你的计算范围 跨度在 3 位数和 4位数之间,所有原来的程序需要判断 i 是否大于 1000。

这样多麻烦啊,还不如直接起个函数 super_prime,直接调用之