超级素数是指从个位起删除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,直接调用之