我正在尝试将素数打印到从用户获得的特定值。如果我只收到1的答案,我想我的for循环有问题吗?
#include <stdio.h>
#include <cs50.h>
int main (void)
{
printf("Length: ");
int length = GetInt();
bool notPrime = false;
for (int i = 1; i < length; i++)
{
for (int k = 1; k <= i/2; k++)
{
if (i % k == 0)
{
notPrime = true;
break;
}
else
{
notPrime = false;
}
}
if (notPrime == false)
{
printf("%d ", i);
}
}
printf("\n");
}
答案 0 :(得分:5)
在内部循环中:
for (int k = 1; k <= i/2; k++)
您从k = 1
开始,并测试k
是否i
。 1
除以任何整数,因此答案将始终为“非素数”,但情况并非如此(请记住素数的定义)。从2
开始:
for (int k = 2; k <= i/2; k++)
答案 1 :(得分:3)
在内部循环中:
for(k=2; k<=sqrt(i); k++)
会奏效。
答案 2 :(得分:0)
您可能需要检查特殊情况,您可以从3开始。 你也可以增加2来排除配对数字:
for(int i = 1; i < length; i++){
if(number < 2) prime = true;
if(number == 2) prime = false;
if(number % 2 == 0) prime = false;
for (int k = 3; k <= i/2; k++){
if(number % i == 0 ){
prime = false;
break;
}
}
if (prime){
printf("%d ", i);
}
}
你应该将IF从第一个bucle中取出,你也可以改变k&lt; = i / 2 - &gt; SQRT(I)