我想写一个程序来确定小于或等于N(包含用户输入的变量)的素数的数量,这是我得到的结果:
N = int(input("Enter number: "))
count = 0
primes = []
for i in range(2, N+1):
for j in range(2, int(i/2)+1):
if (i % j) != 0:
primes += [i]
count += 1
print(count)
print(primes)
但是当我运行代码的时候,它不需要数字2和3是质数。我该怎么修复这个程序呢?
3条答案
按热度按时间8mmmxcuj1#
您可以尝试以下更改:
要检查这个数是否是质数,你需要它来检查所有较小的数的余数是否都不等于0。
此外,
primes += [i]
应该在外部循环中,因为您希望每个数字最多计数一次。请注意,此解决方案在效率方面远非最佳。一些改进可能是:
j
迭代到math.sqrt(i)+1
mmvthczy2#
您可以尝试以下代码:
然后调用函数:
num_is_prime函数在给定的数为质数时返回true,否则返回false。然后打印从2(第一个质数)到给定数的质数,并将它们添加到print_prime_num函数的列表中。我们还打印包含质数的列表的长度。
5uzkadbs3#
您的起点应该是编写一个有效的素数验证器。
例如:
那么,为了处理这种特殊情况:
*注意:sympy 模块有一个 isprime() 函数,它将比这个函数快很多。可以通过更多代码进一步改进。2是唯一的偶数质数。因此,您可以检查它,然后(如果需要)从3开始以2为步长进行范围计算