打印一个区间内的质数
Print prime numbers within an interval
此代码是 运行 用于 1-10 间隔,但对于间隔 20-30,它写的是 21 和 27,我无法理解代码中的错误。我不想知道其他代码;我想知道我的代码有什么问题。
start = int(input("Enter the first number of the interval")) #starting of interval
end = int(input("Enter the last number of the interval")). #end of interval
for i in range(start, end+1):
for x in range (2,end):
if (i == 0 or i==1):
break
elif (i % x != 0):
print(i)
break
else:
break
首先,我不确定你是否想要输入后的句点作为结束。此外,您的代码会检查 i
是否不能被 x
整除,然后打印。因此,例如,您的代码检查 21 是否可以被 2 整除。它不是,因此您的代码将其打印出来并中断。
for x in range (2,end):
if (i == 0 or i==1):
break
elif (i % x != 0):
print(i)
break
else:
break
这部分代码应该
print
a number if it's prime, otherwise break
但事实并非如此。
您注意到您的代码中有什么奇怪的地方吗?我知道,事实上,在每种情况下,在第一次迭代后,内部 for
循环 break
s,重新考虑代码的这方面,它会正常工作。
简介
您的代码有效地测试了一个数字是否为奇数,如果是,它会打印出来。
如果 start
是 1 并且 end
是任何大于 1 的数字,您的代码将打印区间 [1, end]
.
中每个大于 2 的奇数
它正在打印所有奇数,但并非所有奇数都是质数!
剖析你的代码
让我们考虑 [1, 20] 区间。您的代码输出区间 [1, 20]
.
中每个大于 2 的奇数
3, 5, 7, 9, 11, 13, 15, 17, 19.
2 是素数,不在此列表中。我们可以通过在外循环中但在内循环之上编写以下内容来解决这个问题:
if i == 2:
print(i)
现在输出是`
2, 3, 5, 7, 9, 11, 13, 15, 17, 19.
这样更好,但是 9, 15
不是质数。
你的内部循环中带有条件 (i == 0 or i == 1)
的 if
语句不会导致任何问题。让我们通过将其移到内部循环之外(就在上面)来简化内部循环,这样您的代码就变成了
for i in range(start, end+1):
if (i == 0 or i == 1):
# 0 and 1 are not prime
continue
if (i == 2):
# 2 is prime
print(i)
for x in range (2,end):
if (i % x != 0):
print(i)
break
else:
break
您的问题的潜在罪魁祸首是内部循环,所以让我们专注于此。
- 每当
i
是偶数时,在内循环的第一次迭代中,我们
有 x = 2
。我们知道,如果 i
是偶数,则 i % 2
是 0,因此 i % x != 0
是 False
,所以我们转到 else
,在这种情况下我们
跳出内部 for
循环。这一切都很好,因为甚至没有
大于 2 的整数是素数!
- 每当
i
是奇数时,在内循环的第一次迭代中,我们
有 x = 2
。我们知道,如果 i
是奇数,则 i % 2
不为 0,所以
i % x != 0
是 True
然后我们打印 i
然后 break
出来
for
循环。
我们从来没有 x = 3
或 x = 4
等等!
上面准确描述了您的代码正在做什么,即忽略偶数并简单地打印出每个奇数。
输出你想要的解决方案
如果我知道你对质数的定义,那会对我有帮助and/or你正试图实现什么算法。但由于我没有这方面的信息,我只能提出一个解决方案。
为了解决你的问题,你需要清楚地记住什么是质数。素数有许多等效的定义(有关定义示例,请参阅 Wikipedia 素数页面)。我选择了一个建议寻找素数的自然算法的定义。无论给出什么素数定义,都可以从数学上证明它等价于此(对于某些人来说,这是他们看到的第一个素数定义!):
An integer i is prime if and only if i > 1 AND for all k in {2, 3,
..., i - 1}, i % k != 0.
换句话说,整数 i
是质数当且仅当 i
严格大于 1,并且对于从 2
到 [=44] 的所有整数 k
=], k
不平分 i
.
在这里
start = int(input("Enter Start: "))
end = int(input("Enter End: "))
print(f"\nPrime numbers between [{start}, {end}]:")
for i in range(start, end + 1):
if (i == 0 or i == 1):
# i is not prime
continue
if (i == 2):
# i is prime
print(i)
continue
for x in range(2, i):
if (i % x) == 0:
break
if (i % x) != 0:
print(i)
示例会话:
Enter Start: 20
Enter End: 30
Prime numbers between [20, 30]:
23
29
(i == 0 or i == 1)
检查应该放在内部 for
循环之外。否则,对于所有大于或等于 2 的 i
,对于内部循环中的每次迭代,您将检查它是否小于 2。你做这个检查太多了。
我们知道当 i == 2
时 i
是素数。
对于i > 2
,我们求助于上面素数的定义。
内部循环和最后一个语句应用质数定义的第二部分。
此代码是 运行 用于 1-10 间隔,但对于间隔 20-30,它写的是 21 和 27,我无法理解代码中的错误。我不想知道其他代码;我想知道我的代码有什么问题。
start = int(input("Enter the first number of the interval")) #starting of interval
end = int(input("Enter the last number of the interval")). #end of interval
for i in range(start, end+1):
for x in range (2,end):
if (i == 0 or i==1):
break
elif (i % x != 0):
print(i)
break
else:
break
首先,我不确定你是否想要输入后的句点作为结束。此外,您的代码会检查 i
是否不能被 x
整除,然后打印。因此,例如,您的代码检查 21 是否可以被 2 整除。它不是,因此您的代码将其打印出来并中断。
for x in range (2,end):
if (i == 0 or i==1):
break
elif (i % x != 0):
print(i)
break
else:
break
这部分代码应该
break
但事实并非如此。
您注意到您的代码中有什么奇怪的地方吗?我知道,事实上,在每种情况下,在第一次迭代后,内部 for
循环 break
s,重新考虑代码的这方面,它会正常工作。
简介
您的代码有效地测试了一个数字是否为奇数,如果是,它会打印出来。
如果 start
是 1 并且 end
是任何大于 1 的数字,您的代码将打印区间 [1, end]
.
它正在打印所有奇数,但并非所有奇数都是质数!
剖析你的代码
让我们考虑 [1, 20] 区间。您的代码输出区间 [1, 20]
.
3, 5, 7, 9, 11, 13, 15, 17, 19.
2 是素数,不在此列表中。我们可以通过在外循环中但在内循环之上编写以下内容来解决这个问题:
if i == 2:
print(i)
现在输出是`
2, 3, 5, 7, 9, 11, 13, 15, 17, 19.
这样更好,但是 9, 15
不是质数。
你的内部循环中带有条件 (i == 0 or i == 1)
的 if
语句不会导致任何问题。让我们通过将其移到内部循环之外(就在上面)来简化内部循环,这样您的代码就变成了
for i in range(start, end+1):
if (i == 0 or i == 1):
# 0 and 1 are not prime
continue
if (i == 2):
# 2 is prime
print(i)
for x in range (2,end):
if (i % x != 0):
print(i)
break
else:
break
您的问题的潜在罪魁祸首是内部循环,所以让我们专注于此。
- 每当
i
是偶数时,在内循环的第一次迭代中,我们 有x = 2
。我们知道,如果i
是偶数,则i % 2
是 0,因此i % x != 0
是False
,所以我们转到else
,在这种情况下我们 跳出内部for
循环。这一切都很好,因为甚至没有 大于 2 的整数是素数! - 每当
i
是奇数时,在内循环的第一次迭代中,我们 有x = 2
。我们知道,如果i
是奇数,则i % 2
不为 0,所以i % x != 0
是True
然后我们打印i
然后break
出来for
循环。
我们从来没有 x = 3
或 x = 4
等等!
上面准确描述了您的代码正在做什么,即忽略偶数并简单地打印出每个奇数。
输出你想要的解决方案
如果我知道你对质数的定义,那会对我有帮助and/or你正试图实现什么算法。但由于我没有这方面的信息,我只能提出一个解决方案。
为了解决你的问题,你需要清楚地记住什么是质数。素数有许多等效的定义(有关定义示例,请参阅 Wikipedia 素数页面)。我选择了一个建议寻找素数的自然算法的定义。无论给出什么素数定义,都可以从数学上证明它等价于此(对于某些人来说,这是他们看到的第一个素数定义!):
An integer i is prime if and only if i > 1 AND for all k in {2, 3, ..., i - 1}, i % k != 0.
换句话说,整数 i
是质数当且仅当 i
严格大于 1,并且对于从 2
到 [=44] 的所有整数 k
=], k
不平分 i
.
在这里
start = int(input("Enter Start: "))
end = int(input("Enter End: "))
print(f"\nPrime numbers between [{start}, {end}]:")
for i in range(start, end + 1):
if (i == 0 or i == 1):
# i is not prime
continue
if (i == 2):
# i is prime
print(i)
continue
for x in range(2, i):
if (i % x) == 0:
break
if (i % x) != 0:
print(i)
示例会话:
Enter Start: 20
Enter End: 30
Prime numbers between [20, 30]:
23
29
(i == 0 or i == 1)
检查应该放在内部 for
循环之外。否则,对于所有大于或等于 2 的 i
,对于内部循环中的每次迭代,您将检查它是否小于 2。你做这个检查太多了。
我们知道当 i == 2
时 i
是素数。
对于i > 2
,我们求助于上面素数的定义。
内部循环和最后一个语句应用质数定义的第二部分。