C语言求素数问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:20:29
main()
{
int i,n,k=0;
for(i=2;i<=100;i++)
{
for(n=i-1;n>1;n--)
if(i%n==0)
break;
if(n==1)
{
printf("%d",i);
k++;
}
}
printf("k=%d",k);
getch();
}

试过了能编译成功,不过 if(n==1) 那里为什么n要等于1呢?

如果是素数,最后一次for循环执行前n=2,然后i%n!=0,之后n--(即n=1),之后跳出for循环。--完整循环
如果是合数,肯定有某个因子使for循环满足i%n==0,使得for循环在n!=1的情况下break掉(跳出循环)。--不完整循环
所以if(n==1) 是判断for循环是否完整的,从而判断是否为素数。

这样跟你解释获悉能明白点 这里假如i==4
for(n=i-1;n>1;n--)
n==3-->if(i%n==0)不成立且if(n==1)不成立所以还要继续循环

n==2-->if(i%n==0)成立所以4不是素数
这是对于非素数的运算过程
另外当i==3时
n==2-->if(2%3==0)不成立且if(n==1)不成立所以还要继续循环
n--
n==1-->if(1%3==0)不成立且if(n==1)成立
所以3是素数
这就符合素数的概念

素数的概念是一个数只有1和他本身能整除
你看
要判断i是不是素数判断的范围是2到i-1

这里的if(n==1)是跟他的算法有关的。
你上面这段程序的算法是从2-100一次提取一个数i,让他被比i依此小的数来整除,如果可以整除,那么判断这个数是多少,如果是1的话,说明从i-1到1只有1可以整除i,也就判断出来i是素数了。

估计这个函数你都没看懂
N=1才说明它是素数

这个程序有问题,这样写是不对的