我写了一个找到素数的程序。我的老师告诉我分三步完成。首先,我必须生成所有赔率数字。然后我需要检查它是否可以实现。为此,他告诉我使用%运算符。这是我的代码:
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
答案 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)
循环语句可能有一个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")
}
}