关于C语言的判断素数的问题,有点不懂请教一下高手,呵呵!部分程序代码如下

来源:百度知道 编辑:UC知道 时间:2024/06/22 20:57:20
void num(int m,int k,int xx[])
{
int Data;
int half,i,n=0;
Data=m+1;
while(n<k)
{
half=Data/2;
for(i=2;i<=half;i++)
if(Data%i==0) break;
if(i>half) {xx[n]=Data;n++;}
Data++;
}
}
if(Data%i==0) break;这个是说依次对i进行求余只要一个等于0了就要跳出,重新输入一个Data再来判断,但是
我看不懂的是为什么满足if(i>half)就判断此数为素数,
再说for 语句那定义的是(i=2;i<=half;i++) ,为什么会有(i>half)这个条件呢,(i>half)是不是不在for 语句的定义之下呢?

1、
i大于half当然能够说明Data是素数了。
判断素数的条件是除了能被1和自身整除之外不能被其它数整除。也就是说只要不能被自身的一半整除就行了。
当 i>half时,Data已经不能被小于等于Data/2(Data的一半)整除了!到这个时候,已经能判断Data为素数了!

2、
当i==half时,Data都不能被i整除,执行i++,然后判断 i<=half;当i>half时for语句结束!懂吗?

其实for语句的主要目的是让自身终止运行,让它终止有两个条件,第一、if(Data%i==0) break;也就是它判断Data不是素数,因为“Data%i==0”,Data能被小于等于它的数整除,当然不是素数了,然后通过“ if(i>half) {xx[n]=Data;n++; ”这条语句判断,当i没有累加到小于Data/2,那么Data不是素数。第二、i<=half ,如果是这样,那么Data一定是素数了。因为它没有被Data/2的数整除!

素数的定义是只能被1和它本身整除的数,那么判断素数的条件有三个,可以是Data-1,Data/2,根号Data。i>half说明从2到half没有一个数能够整除Data,因此为素数。
第二个问题,i<=half做完以后还要执行一次i++,所以i会大于half

因为Data%i==0这个条件以满足就退出for循环,如果没有满足则i++如果当i加到都大于half时那2到half中间可定没有可以被整除的!所以就是素数啦!i>half
这个条件应该改成i>=half更加好!

非素数能和两个非1数之乘相等
其实也不要half,应该是<=根号下data