【发布时间】:2017-07-22 09:45:51
【问题描述】:
请记住,我几天前才开始学习 Python(第一语言)。
我正在尝试找到给定(并且可能很大)整数“a”的最大素数。我首先定义一个检查整数“n”是否为素数的函数 prime(n)。然后我从最大到最小找到“a”的因子“n”,并用素数(n)检查每个因子。如果找到素数 n,则将其打印出来,然后我使用 break 来结束该过程。如果 n=1 是唯一找到的素因数,那么 'a' 是素数,因此它的最大素因数就是它自己。
此脚本完全失败。即使在 prime(n) 应该将其更改为 True 或 False 之后,变量 n_prime 也会返回到我第一次给它的任何值。如果我从 None 开始,在 prime(n) 之后,它始终保持 None。
我希望它不会太乱,并且我的代码不会有太多问题。
def prime(n):
if n == 1:
n_prime = False
if n == 2:
n_prime = True
if n == 3:
n_prime = True
if n % 2 == 0 and n_prime != True:
n_prime = False
else:
for i in range(3, n, 2):
if i != n:
if n % i == 0:
n_prime = False
break
else:
n_prime = True
n_prime = None
a = int(input())
for n in range (a-1, 1, -1):
if a % n == 0:
prime(n)
if n_prime==True:
if n != 1:
print(n, ' is the greatest prime factor of ', a)
break
else:
print(a, 'is the greatest prime factor of ', a)
break
【问题讨论】:
-
我不知道这是否是您的帖子副本中的拼写错误,但
def prime(n):之后的整个代码块需要缩进。 -
你的缩进看起来不对。
-
在我的代码中,没问题。这是一个复制粘贴问题。
-
你应该使用
return而不是全局变量来获得prime的结果。 -
由于缩进在 Python 中很重要,您应该真正解决复制和粘贴问题(否则很难判断函数何时结束以及其他代码何时开始)。
标签: algorithm python-3.x