我是编程的完整入门者,请原谅我的天真。
我想用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
很重要(在我们的例子中,变量c + 1
是该间隔期间的素数)。
每次变量c
在a
中有0
的余数时,我们都会对a = i % x
进行c
。然后,如果i
达到2,则打印当前变量c
,一旦找到并打印了质数,变量i
便将自身重新初始化为0。
我可以理解,但是一旦c == 2
的值达到4或更高时,我就会感到困惑。 *当程序中有2个以上的因子使其余数等于零时,如何跳过4而不打印? N
是否不等于4并因此打印4? *程序将如何继续下一个数字5? (鉴于变量{{1}}是足够大的输入)。
任何澄清将不胜感激。非常感谢!
答案 0 :(得分:0)
c用于计算均分为i的数字的数量。
例如,如果i = 8
:8被1、2、4和8整除,那么c = 4
因为有4个事物被均匀地分成了
如果i = 5
:5被1和5整除,所以c = 2
因为有2个数字被均分
如果i = 4
(您似乎很困惑):4被1、2和4整除,那么c = 3
而不是2。
答案 1 :(得分:0)
从Wikipedia我们知道:
素数(或素数)是大于1的自然数,不能通过将两个较小的自然数相乘而形成。
因此要找到素数,就是要找到一个自然数,也就是一个整数,只能将其精确除以或将其自身除以1。这称为定义方法以查找素数。
因此,以下循环遍历从1到i
的所有整数,
并计算整数i
被它们精确除的次数。
for x in range (1, (i + 1)):
a = i % x # "a" is a new variable that got introduced.
if a == 0:
c = c + 1
然后,您判断整数i
是否只能被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 = 1
更改为i = 2
并添加一条if
语句,来对此主要搜索算法进行一些改进:
# Start from 2 instead of 1
# and end at `i - 1` instead of `i`
for x in range (2, i):
a = i % x # "a" is a new variable that got introduced.
if a == 0:
c = c + 1
# Abandon the loop
# because an integer with factors other than 1 and itself
# is unevitably a composite number, not a prime
if c > 0:
break
if c == 0:
print(i, end = " ")
counter = counter + 1
if counter >= nPrimes: #if it reaches the number input, the loop will end.
break
这种改进提高了程序的效率,因为避免了不必要和毫无意义的工作。
为防止while
表达式引起的潜在无限循环,
您应将while True:
替换为while counter < nPrimes:
。代码原来是这样的:
#if it reaches the number input, the loop will end.
while counter < nPrimes:
c = 0 #another initialization
# Start from 2 instead of 1
# and end at `i - 1` instead of `i`
for x in range (2, i):
a = i % x # "a" is a new variable that got introduced.
if a == 0:
c = c + 1
# Abandon the loop
# because an integer with factors other than 1 and itself
# is unevitably a composite number, not a prime
if c > 0:
break
if c == 0:
print(i, end = " ")
counter = counter + 1
i = i + 1
如果您想了解更多有关如何提高程序查找质数的效率的信息,请阅读this code in C language。 :P