有关C语言用BOOL变量求质数的问题...急,等

来源:百度知道 编辑:UC知道 时间:2024/04/27 23:53:30
/*你好,代码如下,生成50以内的所有质数*/
int p,d;
_Bool a;

for(p=2;p<=50;++p){
a=1;
for(d=2;d<p;++d)
if(p%d ==0)
a=0; /*这是教材的一个示例,我的问题就在这个地方,如果P为一个质数的时候,那么p%d会有0与大于0两种情况,a的值是不是就会变化在0与1之间吗?(转下)
if(a!=0) /*那么到这个地方的时候,它又应该怎么样选择a的值呢?我很迷惘,希望你们能详细回答,20分不成敬意,谢谢,急着明白,还有,程序是对的..*/
printf("%i",p);
}

输出:2.3.5.7.11.13.17.19.....

p%d ==0则p不是质数,假设p从2开始除到p-1,碰到一个可以整除的,这时就把a改成0,以后即使再碰到不能整除的数,也不会把a改成1。所以,只要碰到可以整除的数,不管是一个还是多个,a就是0了,a不会在0 1之间变化。

所以下面也就不存在什么选择了,a!=0,说明p在循环除的时候没有遇到一个可以整除的数,p就是质数,所以就将p的值输出。

p%d的值有0个大于0的情况,那么a的值就在0和1之间。

a的值的含义就是代指一个数是不是质数。。

p%d是求余,如果余数为0,那么a=0,表示d能整除p,就是说p除了本身意外,还有个数能够整除p,这与质数定义不符!

程序的意思是对于一个数p,用2到p之间的数去一个一个验证,如果是质数,那么表示除了1和p本身没有能除p的数(用d来代替2到p之间的数),那么p%d就永不为0。那么a的值就一直为1,表示真,说明数p是质数!