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

2024-06-26 10:01:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个求素数的程序。我的老师叫我分三步做。首先我要生成所有的赔率数字。然后我需要检查它是否可偏离。为此,他告诉我使用%运算符。这是我的密码:

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

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

上面的代码给了我错误的答案。但是这里的虫子呢?我需要解释一下。你知道吗

上述代码的示例输出为: 三 5 5 5 7 7 7 7 7 9 9 9 9 9 9个


Tags: 代码in程序none密码forifrange
3条回答

我提供的伪代码用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")
}
}   

如果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.

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

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

对从3到10的所有数字进行迭代(向上计数)。已经少了数字2,它也是素数。你应该先把它打印出来,这样才能完整。你知道吗

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

接下来,循环所有小于当前数字的数字。首先,你可以停在num/2,因为除数不能大于这个数。 现在您的bug出现了:每次num中的一个没有被分割时,您就打印i。这不是质数。只有当没有一个数i除以num时,它才是一个素数。我建议您反转您的逻辑:在else语句中打印,并使用python语句break在其中一个i除法时转义循环。你知道吗

另外:else: None什么都不做,你可以不做。在Python中,不是每个if都必须有一个else。你知道吗

相关问题 更多 >