我正在使用此函数来获取数字的素因子。当前输出正在打印每个素数。我试图了解此代码的工作原理,但不了解while
循环的工作原理。
def get_primes(n):
for i in range(2, n + 1):
while n % i == 0:
n = n / i
print(i)
print(get_primes(32))
输出为正确答案2 2 2 2 2
。但是我不明白2
是i
唯一的值,而n % i == 0
是唯一的值。
答案 0 :(得分:2)
因为这就是答案。乘以形成32的素数是2、2、2、2和2。
这是数学事实;与Python无关。
答案 1 :(得分:2)
让我们逐行浏览代码:D
def get_primes(n): # great use of a function :D
for i in range(2, n + 1): # this loops through the possible factors
while n % i == 0: # this loops through n, trying to factor it
n = n / i # these only run if i is a factor of n
print(i) # note that n = n/i only runs when i is a factor
# meaning it divides for the upcoming iterations
您的代码运行得很好。因为i
从for循环的开始是2,所以我们将检查其中的代码。当函数进入while
循环时,它将检查是否n%i == 0
,当i
为2时表示n%2 == 0
。当n
为偶数时,n = n/i
将运行。也会print(i)
。当它第二次出现时,n
是原始n
的一半。请注意,while
循环仅在n%i == 0
时运行,这意味着i
需要成为主要因素。这将找到n
的所有主要因素。
因为32等于2 * 2 * 2 * 2 * 2或2 ^ 5,所以它打印了5次2。尝试不同的方法,您会发现它有效:D