为什么达不到预期效果呢,我想要输出2-100的所有素数
#include
#include
#include
int main()
{
int i = 0;
int n = 0;
int k = 0;
int leap = 1;
for(i = 3; i<100; i++)
{
k = (int)sqrt(i);
for(n=2; n<=k; n++)
{
if(k%n==0)
{
// leap = 0;
break;
}
}
if(n>k)
printf("%d ", i);
// leap = 1;
}
return 0;
}
不知道为什么
用的dev c++
改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i = 0;
int n = 0;
int k = 0;
int leap = 1;
for(i = 2; i<100; i++)//or(i = 3; i<100; i++)修改
{
k = (int)sqrt(i);
for(n=2; n<=k; n++)
{
if(i%n==0) //if(k%n==0)修改
{
//leap = 0;
break;
}
}
if(n > k)
printf("%d ", i);
//leap = 1;
}
return 0;
}
该回答引用ChatGPT
这个程序中,我们首先输出2,然后从3开始循环,每次增加2。在内层循环中,我们检查当前数字是否可以被前面的奇数整除,如果可以,说明当前数字不是素数,直接跳出循环。如果当前数字无法被前面的奇数整除,则说明它是素数,输出并继续循环。
注意,在判断是否可以被前面的奇数整除时,我们只需要检查到当前数字的平方根即可,因为如果当前数字有大于平方根的因数,那么一定存在一个小于平方根的因数
#include <stdio.h>
int main() {
int i, j, flag;
printf("2 ");
for (i = 3; i <= 100; i += 2) { // 从3开始,每次增加2,因为偶数不可能为素数
flag = 1;
for (j = 3; j < i; j += 2) { // 从3开始,每次增加2,因为偶数不可能为素数
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag) {
printf("%d ", i);
}
}
return 0;
}