一个判断素数的题,我有一个地方不明白

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:05:37
#include "stdio.h"
main()
{int k,i,tag;
for(i=2;i<=100;i++)
{tag=0;
for(k=2;k<i;k++)
if(i%k==0) tag=1;
if(tag==0) printf("%d,",i);
}
}
在内层循环for(k=2;k<i;k++) 这句话中,k<i i的初值是2,k的初值也是2,k<i怎么会成立呢,if(i%k==0) tag=1; i为2,k也为2,应该被判断为不是素数才对,可是2是素数啊

注意第二个for循环的循环体只是一个if语句,而那个第二个if语句是循环体外面的,所以会输出2啊,所以当i=2的时候for循环不会被执行,直接输出2的啊

for(k=2;k<i;k++) if(i%k==0) tag=1; 一句不合适。

应为
m=(int)sqrt(i);
for(k=2;k<m;k++){
if(i%k==0) {tag=1;break;}
}

如果不加 break;就会覆盖正确tag;

for(k=2;k<i;k++)
if(i%k==0) tag=1;
如果k=2的话,k<i已经让循环不执行了,所以直接跳到if(tag==0) printf("%d,",i);

#include "stdio.h"
main()
{int k,i,tag;
for(i=2;i<=100;i++) /*设置素数范围*/
{tag=0; /*设置tag初始值*/
for(k=2;k<i;k++)
if(i%k==0) tag=1; /*for(k=2;k<i;k++)的语句*/
if(tag==0) printf("%d,",i); /*如果if(i%k==0) tag=1;未执行,tag=0,执行打印语句,输出素数*/
}
}

质数(又称为素数)
1.就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数或素数。
2.素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任 何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12
=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以
外,不能表示为其它任何两个整数的乘积,所以13是一个素数。

根据以上定义,可见程