列出所有数字因素

时间:2017-11-01 22:50:14

标签: python factors

我试图列出一个名为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

5 个答案:

答案 0 :(得分:3)

您可以参考此代码:

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

答案 1 :(得分:2)

这可以使用list comprehension一行完成。

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

答案 2 :(得分:1)

首先,您有缩进错误。 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,但这是我要留下的东西。如果你愿意的话,有点挑战。 ;)

答案 3 :(得分:0)

这是我提出的总代码。谢谢你的帮助。

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)

它将打印因子的数量,然后打印下一行的因子。

答案 4 :(得分:0)

到目前为止给出的答案都是蛮力方法。

对于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

如果有可用质数的列表,则可以使其更快。