① c语言求超级素数
给你个完整的:
#include<stdio.h>
intisprim(intn)
{
inti;
if(n<2)return0;
for(i=2;i*i<=n;++i)
if(n%i==0)return0;
return1;
}
intisssp(intn)
{
if(!isprim(n))return0;
while(n/10)
if(!isprim(n/=10)) return0;
return1;
}
intmain()
{
inti;
intcnt=0;
intmaxp;
printf("从100-9999的超级素数有: ");
for(i=100;i<10000;++i)
{
if(isssp(i))
{
++cnt;
maxp=i;
printf("%8d",i);
if(cnt%5==0)
printf(" ");
}
}
printf(" 总共有:%d个 ",cnt);
printf("最大的是:%d ",maxp);
return0;
}
② C语言编写超级素数
超级素数是指从个位起删除0位、1位、2位……直到只剩最后1位都是素数的十进制正整数。可以自定义一个素数判断函数,对某一正整数n及从个位起每删除1位的新数逐一进行判断,都是素数的则是题解。以下代码先要求输入正整数n,输出2~n之间的所有超级素数:
#include"stdio.h"
intprime(intn){//判断素数,素数返回0,否则返回1
inti;
if(n>2&&!(n&1)||n<2)
return1;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return1;
return0;
}
intmain(intargc,char*argv[]){
intn,i,t;
printf("Inputn(intn>1)... n=");
if(scanf("%d",&n)!=1||n<2){
printf("Inputerror,exit... ");
return0;
}
for(i=2;i<=n;i++){
for(t=i;t;t/=10)//从低位删除0位,1位...直到只剩1位都是素数的为超级素数
if(prime(t))
break;
if(!t)
printf("%d",i);
}
printf(" ");
return0;
}
运行样例如下:
③ C语言编程题:超级素数。
/**************************************
大体的思路:先求出1000-9999之间的素数,然后在这些素数中
找出前1、2、3、4位都是素数的数即为超级素数,每次找到一个
超级素数都与之前的超级素数加和,并且记录超级素数个数的变量加1,
并与之前找到的超级素数比较,记录最大的超级素数。
最后输出就可以了。
************************************/
#include <stdio.h>
#define MAX 10000
int prime[MAX] ; //prime数组记录1到9999每个数是否为素数,例如prime[9999]==1表示9999是素数
//searchPrime是找出1到9999之间的所有素数,并保存到prime数组
void searchPrime()
{
int i, j ;
for(i = 0; i < MAX; i++)
prime[i] = 1 ; //所有元素初始化为1,即假定都是素数
prime[0] = 0 ;//0不是素数
prime[1] = 0 ;//1不是素数
//下面开始筛选素数
for(i = 2; i*i < MAX; i++)
{
if(prime[i]) //如果i是素数,把它的倍数都筛掉
for(j = 2*i; j < MAX; j+=i)
{
prime[j] = 0 ; //j是i的倍数,因此j最起码有一个因子是i,所以不可能是素数
}
}
}
int main()
{
int sum ; //sum记录超级素数的和
int i ;
int count ; //count记录超级素数的个数
int max ; //max记录最大的超级素数
int n ;
scanf("%d", &n) ;
searchPrime() ; //初始化Prime数组
count = 0 ;
sum = 0 ;
max = 0 ;
for(i = 1001; i <= n; i++)
{
if(prime[i] && prime[i/1000]
&& prime[i/100] && prime[i/10]) //说明i是超级素数
{
sum += i ;
count++ ;
if(max < i)
max = i ;
}
}
printf("%d\n%d\n%d\n", count, sum, max) ;
return 0 ;
}
//写的仓促,只验证了9999,其他的数字并未验证,有问题再反馈吧。
④ 用c语言编程求超级素数的思路是什么
是要求一个数为超级素数还是求某个范围内所有超级素数?
另外超级素数有两种定义,一种是从高位去掉还是素数. 一种是从低位去掉还是素数. 这个会影响程序算法.
如果是求一个数是否为超级素数, 那么先判断是否为素数, 如果是, 那么再根据定义, 从高位或者低位一个个去掉, 每去掉一位, 判断一次是否为素数. 如果是则继续. 最终得到的如果都是素数, 那么就是超级素数.
求某个范围内所有超级素数, 可以遍历该范围内所有数, 逐一判断.
如果范围比较大,也可以先求出所有个位素数,然后根据定义增加位, 从而打表得到所有小于最大值的超级素数, 再反查最小值以上的.
⑤ c语言求超级素数
逻辑乱得有点厉害,如
for(n=2;n<m;n++)
if(m%n==0)
break;
这里的break;只结束for(n=2;...这个循环,还在前一个for(k=0;k<3;k++)循环中;可是break;就意味着m已经不是素数了,那么整个m所在的3位数就不是超级素数,还有什么必要继续做for(k=0;k<3;k++)这个循环?这种题比较好的结构是弄一个素数判断函数,不断用原数和它不断除以10的数调用,都返回“真”的就是超级素数,否则不是。代码如下——
#include"stdio.h"
intprime(intn){//素数
inti;
if(n>2&&!(n&1)||n<2)
return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return0;
return1;
}
intmain(intargc,char*argv[]){
inti,j,k;
for(k=0,i=101;i<=9999;i+=2){
for(j=i;j>0;j/=10)
if(!prime(j))
break;
if(!j)
printf(++k%10?"%5d":"%5d ",i);
}
if(k%10)
printf(" ");
return0;
}
运行结果: