【问题标题】:Checking if prime number then printing factors检查是否是素数然后打印因子
【发布时间】:2018-11-03 21:31:13
【问题描述】:

该问题要求检查一个数字是否为质数。如果不是,那么您必须创建一个单独的函数来打印素数的因子列表。确切的问题是:

编写两个函数(isPrime 和 primeFactors)。功能 isPrime 如果它的参数是素数,则返回 True,否则返回 False。函数 primeFactors 将返回一个数字的素因子列表。

到目前为止我有:

def isPrime(x):
if x==1:
    return False
elif x==2:
    return True
else:
    for i in range(2,x):
        if (x % i==0):  
            return False

第一个函数检查数字是否为素数。但是,我不确定如何使 primeFactors 函数仅在结果不是素数时才起作用。

【问题讨论】:

    标签: python primes


    【解决方案1】:

    既然你已经有了判断一个数是否为素数的函数,那么求一个数的素因数的函数如下:

    def findPrimeFactors(number):
        primeFactors = []
    
        for i in range(2, number + 1):
            if number % i == 0 and isPrime(i):
                primeFactors.append(i)
    
        return primeFactors
    

    【讨论】:

      【解决方案2】:

      如果您想查找所有主要因素,包括重复项,即 @Omari Celestine'sanswer 将仅返回 [2]findPrimeFactors(8) 而不是 [2, 2, 2] 等。

      你可以这样做,注意我在每个函数中只检查n的平方根:

      def is_prime(n):
        if n < 2:
          return False
        else:
          i = 2
          while i * i <= n:
            if n % i == 0:
              return False
            i += 1
          return True
      
      def prime_factors(n):
        primes = []
        i = 2
        while i * i <= n:
          if not is_prime(n):
            n = n // i
            primes.append(i)
          else:
            i += 1
        if n > 1:
          primes.append(n)
        return primes
      
      print(is_prime(9)) # False
      print(prime_factors(8)) # [2, 2, 2]
      print(prime_factors(37)) # [37]
      print(prime_factors(56)) # [2, 2, 2, 7]
      print(prime_factors(23424)) # [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多