簡體   English   中英

列出數字的所有因數

[英]List all factors of number

我正在嘗試列出一個名為 count 的數字的所有因數。 每當我運行它時,它都會返回 1。例如: if 6 = count ,那么調用findFactor(6)時應該返回的是1 2 3 6 返回的是1

divisors = ""
def findFactor(count):
    divisors = ""
    valueD = 0
    for i in range(1, count+1):
        valueD = count/i
        if isinstance(valueD,int) == True:
            divisors = str(valueD)+" "
    print divisors

這可以使用list comprehension在一行上完成。

def factorize(num):
    return [n for n in range(1, num + 1) if num % n == 0]

你可以參考這個代碼:

def find_factor(n):
  factor_values = []
  for i in range(1, n + 1):
    if n % i == 0:
      factor_values.append(i)

  values = ""
  for v in factor_values:
    values += str(v) + " "

  return values

該函數將返回1 2 3 6

首先,你有一個縮進錯誤。 需要將print divisors標記到 for 循環內部。

divisors = ""
def findFactor(count):
    divisors = ""
    valueD = 0
    for i in range(1, count+1):
        valueD = count/i
        if isinstance(valueD,int) == True:
            divisors = str(valueD)+" "
        print divisors

此外,就像提到的 @juanpa.arrivillaga 一樣,您的結果在 Python 2 和 Python 3 之間會有所不同。

但是,如果您希望divisors按您想要的順序打印,即從1開始,您需要將范圍更改為for i in range(count,0, -1) 你會得到多個1 ,但這是我留給你弄清楚的事情。 有點挑戰,如果你願意的話。 ;)

這是我想出的總代碼。 謝謝大家的幫助。

def findFactor(n):
  factorValues = []
  for i in range(1, n + 1):
    if n % i == 0:
      factorValues.append(i)

  values = ""
  for v in factorValues:
    values += str(v) + " "

  print values.count(" ")
  # prints the number of factors


  print values
findFactor(21)

它將打印因子的數量,然后在下一行打印因子。

目前給出的答案都是蠻力方法。

對於 n=10000,他們將不得不迭代一萬次。

以下將僅迭代 100 次:

def find_factors(n):
    factors = []
    i = 1
    j = n
    while True:
        if i*j == n:
            factors.append(i)
            if i == j:
                break
            factors.append(j)
        i += 1
        j = n // i
        if i > j:
            break
    return factors

如果有一個可用的素數列表,它可以做得更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM