如何找到素数而不是错误。我无法找到答案

时间:2016-05-20 06:24:55

标签: python python-2.7 python-2.x

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

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

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

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

上述代码的示例输出是: 3 五 五 五 7 7 7 7 7 9 9 9 9 9 9

3 个答案:

答案 0 :(得分:1)

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

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

  

循环语句可能有一个else子句;当循环通过列表耗尽(with for)或条件变为false(with while)时终止,但是当循环被break语句终止时,它被执行。

幸运的是,它提供了关于素数的样本。

答案 1 :(得分:1)

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

你对从3到10的所有数字进行迭代(向上计数)。这已经错过了数字2,这也是素数。您应该在其他所有内容之前打印出来,以便完成。

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

接下来,遍历所有小于当前数字的数字。首先,你已经可以停在num/2,因为除数不能大于此值。 现在出现了您的错误:每当num中的一个没有划分时,您就会打印i。这不是素数。如果数字i中没有num除以else,那么它只是素数。我建议你颠倒你的逻辑:在break语句中打印并使用python语句i来转义循环,如果其中一个else: None除以。

另外:if没有做任何事情,你可以把它留下来。在Python中,不是每个else都必须有Google Drive V3 API

答案 2 :(得分:-2)

我提供您熟悉的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")
}
}