C的素数问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:05:13
#include <stdio.h>
int main(void)
{
int j;
int k,prime;
printf("The prime between 1 and 100 are:\n");
for(j=2;j<=100;j++)
{
prime=1;
k=2;
while(k<=(j/2))//这为什么是除以二呢?如果循环到5的话,5/2的值不是2吗(整数去尾)?j%k余数不就是0了吗?
{
if(j%k==0)
prime=0;
k++;
}
if(prime==1)
printf("%4d",j);
}
printf("\n");
return 0;
}
哥哥说清楚了啊...为什么k*k啊

正如你所说的,当循环到5时,j的值就是5,而k的取值就是2. 5%2 就是取5.0除以2 的余数,就是1.

除以2缩减了一半的数例举过程,节省时间
其实最佳效率的语句应该替换为
while ( k * k < j )
这样就把需要例举的数据缩减至开方数

while(k<=(j/2))//这为什么是除以二呢?如果循环到5的话,5/2的值不是2吗(整数去尾)?j%k余数不就是0了吗?

更好的表示方法是 k < (int)sqrt(j)

你的代码有问题,质数判断应该从3开始,2是质数这个大家都知道。

5%2不为0,是1