![](/img/trans.png)
[英]Python: Find the two prime factors of a number. how to make this code more efficiency?
[英]python code trying to find prime number. Code is counting not prime number. Can't find why
我试图在用户选择的范围内找到每个素数,列出它们并计算它们。 我的代码计数和列表编号不是素数。 我真的找不到原因? 有人可以帮我吗。
print("This code will count how many prime number exist in a certain range")
count = 0
lower = int(input("Enter lower range: "))
upper = int(input("Enter upper range: "))
prime = []
for num in range(lower, upper + 1):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
prime.append(num)
break
print(prime)
print("There are", len(prime), "prime number between", lower, "and", upper)
你的素数部分是错误的。 我将把它抽象为一种不同的方法,以使其更容易。 要成为素数, n%x
必须支持任何x
,使得x
在数字集合[2,ceil(sqrt(n))]
。
确保您import math
def is_prime(num):
for i in range(2, math.ceil(num**(1/2))):
if num%i==0:
return False
return True
然后,只需更换
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
prime.append(num)
break
和,
if num>1:
if is_prime(num):
prime.append(num)
您的问题是您不等待所有除法检查将数字附加到素数列表:
if (num % i) == 0:
break
else:
prime.append(num)
break
您的代码的修复:
is_prime =True
for i in range(2,num):
if num % i == 0:
is_prime = False
break
if is_prime:
prime.append(num)
$ python prime_test.py
This code will count how many prime number exist in a certain range
Enter lower range: 12
Enter upper range: 20
[13, 17, 19]
('There are', 3, 'prime number between', 12, 'and', 20)
问题就在这里,
for i in range(2,num):
if (num % i) == 0: #If num is divisible by SOME i, it is not prime. Correct.
break
else: #If num is not divisible by SOME i, it is not prime. WRONG.
prime.append(num)
break
您应该像这样检查条件: If num is not divisible by ANY i, it is prime
。
使用 else 和 for 进行最少的更改,
for i in range(2,num):
if (num % i) == 0:
break
else:
prime.append(num)
这是从列表中获取素数的解决方案。 询问用户应创建质数之间的范围并将其存储在list
:
list4=list(range(3,10,1))
prime_num=[x for x in list4 if x%2!=0 and x%3!=0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.