【发布时间】:2018-09-05 13:22:36
【问题描述】:
我是一个完全的编程初学者,所以请原谅我的幼稚。
我想用 Python 编写一个程序,让我打印给定的N 数量的素数,其中N 由用户输入。我在“for/while”循环上进行了一些搜索并做了一些修改。我运行了一个我在网上看到的程序并对其进行了修改以适应问题。代码如下:
i = 1
print("Hi! Let's print the first N prime numbers.")
nPrimes = int(input("Enter your N: "))
counter = 0
while True:
c = 0 #another initialization
for x in range (1, (i + 1)):
a = i % x # "a" is a new variable that got introduced.
if a == 0:
c = c + 1
if c == 2:
print(i, end = " ")
counter = counter + 1
if counter > = nPrimes: #if it reaches the number input, the loop will end.
break
i = i+1
print(": Are your", nPrimes, "prime number/s!")
print()
print("Thanks for trying!")
这应该能够打印出用户喜欢的素数数量。这是一个有效的代码,虽然我很难理解它。似乎变量 c 在决定是否打印变量 i(在我们的例子中是该间隔期间假定的素数)方面很重要。
每当我们的变量a 在a = i % x 中具有0 的余数时,我们就执行c + 1 到c。然后,如果 c 达到 2,则打印当前变量 i,并且一旦找到并打印素数,变量 c 将自身重新初始化为 0。
这是我可以理解的,但是一旦i 的数字达到 4 及以上,我就会感到困惑。 *当 4 的余数等于 0 的范围内有 2+ 个因数时,程序如何跳过而不打印 4? c == 2 不会为 4 并因此打印 4 吗? *该程序将如何继续到下一个数字 5? (假设变量N 是一个足够大的输入)。
任何澄清将不胜感激。非常感谢!
【问题讨论】:
-
c 很重要,因为每个素数 X 都可以被 2 整除,从 1 到 X,即 1 和 X。基本上从 1 开始 --> X 你将 X 除以这些,如果可整除,即
i%x == 0然后 c 递增。任何素数都应该有 c = 2,因为 1 并且素数是除数。不打印任何其他具有更大 c 的数字。干杯。 -
例如,对于数字 4.c 从 0 开始。4%1 = 0 --> c=1 然后 4%2 = 0 --> c=2 然后 4%4 = 0 - -> c=3。已经大于 2。
-
我看到了@HadiFarah!因此,不能打印 4,因为它的 c 不仅仅是 2。而 5、7、9... 是 c==2。非常感谢!我可能想多了:)