关于输入一个数字,输出等于或小于他的素数。为什么这个程序不行。

#include
#include
int main()
{
int i,j,k;
scanf("%d",&i);
for(j=1;j<=i;j++)
{
for(k=1;k<j;k++)
{
if(j%k==0)
continue;
else goto anwser;

}
anwser: printf("%d",j);
}
return 0;
}

2个回答

你这肯定不对,你可以自己看看,当i输入8的时,当k=8是,8%6就不等于0

 int main()
{
int i,j,k;
scanf("%d",&i);
for(j=1;j<=i;j++){
    for(k=2;k<j;k++){
     if(j%k==0) break;
    }
    if(j==k) printf("%d",j);
}
return 0;
}

里面的这个for循环的作用是判断j是否是素数,但是像你这样写的话,逻辑就成了:从 k=1 开始,如果 j 不能被 k 整除,那么就 print j,这个逻辑明显是不对的。
可以这样改:
for(k=2;k<= sqrt(j); k++) //判别j是否为素数,只需使2~根号j之间的每一个整数去除
{
if(j%k==0)
{
break; // j 不是素数
}
if(k == sqrt(j)) // 没有 k 可以整除 j
{
printf("%d是素数 ",j);
}
}

qq_41053995
hackergroup 回复24个日记本: 谢谢了
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问