如何找到素数,但有错误。我找不到
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
。
我编写了一个程序来查找素数。我的老师告诉我要分三步完成。首先,我必须生成所有赔率数字。然后我需要检查它是否是可偏差的。为此,他告诉我使用 % 运算符。这是我的代码:
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
。