c语言求超级素数
答案:2 悬赏:60 手机版
解决时间 2021-04-15 23:37
- 提问者网友:人生佛魔见
- 2021-04-15 13:48
c语言求超级素数
最佳答案
- 五星知识达人网友:山有枢
- 2021-04-15 14:38
你的求超级素数的C语言程序,我帮你改好了,你看看吧,运行结果没有问题(因为运行结果太长,我就不在这里贴出来了,你自己运行一下就行了.)
#include
int main()
{
int i,j,k,m,n,flag=1;
for(i=100;i<=9999;i++)
{
for(j=2;j if(i%j==0)
break;
if(j==i)
{
if(i<=999)
{
flag=1;
m=i;
for(k=0;k<2;k++)
{
m=m/10;
for(n=2;n if(m%n==0)
break;
if(n==m){
}else flag=0;
}
if(flag==1)
printf("%d ",i);
}
if(i>999)
{
flag=1;
m=i;
for(k=0;k<3;k++)
{
m=m/10;
for(n=2;n if(m%n==0)
break;
if(n==m){
}else flag=0;
}
if(flag==1)
printf("%d ",i);
}
}
}
return 0;
}
#include
int main()
{
int i,j,k,m,n,flag=1;
for(i=100;i<=9999;i++)
{
for(j=2;j if(i%j==0)
break;
if(j==i)
{
if(i<=999)
{
flag=1;
m=i;
for(k=0;k<2;k++)
{
m=m/10;
for(n=2;n
break;
if(n==m){
}else flag=0;
}
if(flag==1)
printf("%d ",i);
}
if(i>999)
{
flag=1;
m=i;
for(k=0;k<3;k++)
{
m=m/10;
for(n=2;n
break;
if(n==m){
}else flag=0;
}
if(flag==1)
printf("%d ",i);
}
}
}
return 0;
}
全部回答
- 1楼网友:西风乍起
- 2021-04-15 16:03
逻辑乱得有点厉害,如for(n=2;n
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"
int prime(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 argc,char *argv[]){
int i,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(" ");
return 0;
}
运行结果:
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯