初级素数分解
Beginner prime factorization
我编写了一个初学者程序,旨在查找和打印任意数字的质因数:
def is_prime(n):
if n == 3:
return True
elif n == 4:
return False
else:
n = int(n**0.5)+1
for i in range(2,n):
if n % i == 0:
return False
return True
def prime_factors(n):
for i in range(2,n):
if n % i == 0:
x = i
primes.append(x)
y = n / x
return y
break
primes = []
def main(y):
while not is_prime(y):
y = prime_factors(y)
primes.append(y)
print(primes)
以下是程序的运行示例,让我感到困惑:
main(625)
[5, 5, 5, 5]
...
main(160)
[160]
...
main(6)
[6]
...
main(1007)
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
有些输入有效,有些无效。我不知道为什么。我也不知道如何解决这个错误。请帮忙。谢谢。
您的 is_prime
函数似乎在这些行中错误地重用了变量 n
:
n = int(n**0.5)+1
for i in range(2,n):
if n % i == 0:
您可以考虑使用更具描述性的名称,例如 factor_limit
。
你有很多问题,这里有一些最值得注意的问题
1.
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
告诉你 python 不知道如何 None**0.5
2. 如另一个 中所述,您正在检查 n 的平方根是否能被 i 整除,而不是 N 是否能被 i 整除 [=14] =]
3.
def prime_factors(n):
for i in range(2,n):
if n % i == 0:
x = i
primes.append(x)
y = n / x
return y
break #<--- this is totally worthless and does nothing
#if you get here you are returning None... which breaks(see #1)
return [1] #might fix your problem ...
可能还有一些其他问题
我编写了一个初学者程序,旨在查找和打印任意数字的质因数:
def is_prime(n):
if n == 3:
return True
elif n == 4:
return False
else:
n = int(n**0.5)+1
for i in range(2,n):
if n % i == 0:
return False
return True
def prime_factors(n):
for i in range(2,n):
if n % i == 0:
x = i
primes.append(x)
y = n / x
return y
break
primes = []
def main(y):
while not is_prime(y):
y = prime_factors(y)
primes.append(y)
print(primes)
以下是程序的运行示例,让我感到困惑:
main(625)
[5, 5, 5, 5]
...
main(160)
[160]
...
main(6)
[6]
...
main(1007)
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
有些输入有效,有些无效。我不知道为什么。我也不知道如何解决这个错误。请帮忙。谢谢。
您的 is_prime
函数似乎在这些行中错误地重用了变量 n
:
n = int(n**0.5)+1
for i in range(2,n):
if n % i == 0:
您可以考虑使用更具描述性的名称,例如 factor_limit
。
你有很多问题,这里有一些最值得注意的问题
1.
TypeError: unsupported operand type(s) for ** or pow(): 'NoneType' and 'float'
告诉你 python 不知道如何 None**0.5
2. 如另一个 3. 可能还有一些其他问题def prime_factors(n):
for i in range(2,n):
if n % i == 0:
x = i
primes.append(x)
y = n / x
return y
break #<--- this is totally worthless and does nothing
#if you get here you are returning None... which breaks(see #1)
return [1] #might fix your problem ...