c语言编程,求素数的问题
发布网友
发布时间:2022-04-26 10:03
我来回答
共1个回答
热心网友
时间:2022-06-27 03:30
他这样是筛素数
a[i]最初等于2
他把能被2整除的都记为0了
那在以后的运算中
保证a[i]是素数
也就是除一个素数
a[j]等于0
说明他已经被一个素数整除了
已经不是素数了
所以就不用再计算他了
也就是
先筛掉2的倍数
再筛掉3的倍数
再筛掉5的倍数(4被2整除
已经记为0)
再筛掉7的倍数(6被2整除
已经记为0)
再筛掉11的倍数
(8被2整除
9被3整除
10被2整除
都已经被记为0)
。。。。。
最后剩下的就都是素数了
楼主主要注意一下i和j的循环
j的循环是在i的循环里面的,而且他们同是代表数组a的下标
那么当i=2时,是进入j的循环,此时是要将j的循环跑完之后才再进行i++
那么a[j]已经记为0的数,也就是j,i的循环肯定是之后才会循环到
再说明白点,当i=2时,你把j=4的a[j]=0,那么此时的i是2,之后i会自加到4
那么a[i]就是0
如果楼主想不明白
可以把i和j的循环打出来看一下,就像这样
for(i=2;i<sqrt(N);i++)
for(j=i+1;j<N;j++)
{
printf("i=%d
j=%d\n",i,j);
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}