如何找到素数,但有错误。我找不到

How to find prime number's but theres bugs. I can't find out

我编写了一个程序来查找素数。我的老师告诉我要分三步完成。首先,我必须生成所有赔率数字。然后我需要检查它是否是可偏差的。为此,他告诉我使用 % 运算符。这是我的代码:

for num in range(3,10):
    if num%2 != 0: #generating odds
        for i in range(3,num):
            if num%i != 0:
                print num
            else:
                None
    else:
        None

现在我的问题是,上面的代码是否正确生成素数?

上面的代码给了我错误的答案。但是这里的错误在哪里?我需要解释 .

以上代码的示例输出是: 3个 5个 5个 5个 7 7 7 7 7 9 9 9 9 9 9

如果 num 不是素数,则第二个 for 循环应该终止。

for num in range(3, 100):
    if num % 2 != 0:
        for i in range(3, num):
            if num % i == 0:
                break
        else:
            print(num)

我为你找到了the official document

Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.

幸运的是,它提供了一个关于素数的示例。

我提供了C语言的伪代码你看懂了试试

int num=40; //your variable
for(int i=3;i<num;i++)
{
 if(i%2!=0)  //odd
 {
    int j=3;
    for( ;j<i;J++)
    {
     if(i%j==0)
      {
       printf("not Prime");
       break;
      }
    }
   if(i==j)
    {
     printf("num is prime=%d",&i);
    }

}
else
{
 printf("none")
}
}   

你的想法有一些是正确的,但也有一些错误。既然你提到了一位老师,我就不给你代码示例了,只是一些提示。

您对从 3 到 10 的所有数字进行迭代(向上计数)。这已经缺少数字 2,它也是素数。您应该在其他所有内容之前先打印它,以确保完整。

然后你通过 %2 检查一个数字是否为奇数。这是一个好主意,但在 python 中也可以通过使用 range(3,10,2) 来迭代仅奇数。最后一个数字是步长,所以它会计数 3, 5, 7, 9。 (这只是一个增强,你的版本没有问题)

接下来循环遍历所有小于当前数字的数字。首先,您已经可以停在 num/2,因为除数不能大于它。 你的错误现在来了:每次 i 之一不除时你打印 num 。这不是素数。如果数字 i 中的 NONE 整除 num,则它只是质数。我建议你反转你的逻辑:在 else 语句中打印并使用 python 语句 break 如果 i 中的一个 divide.

此外:else: None 什么都不做,您可以将其省略。在 Python 中,并非每个 if 都必须有一个 else