【问题标题】:Find total count of Distinct Prime in given array using Python使用 Python 查找给定数组中 Distinct Prime 的总数
【发布时间】:2018-08-05 12:47:38
【问题描述】:

问题是这样的—— 你给了一个包含 N 个整数的数组 A。假设 G 是 A 的所有元素的乘积。您必须找到 G 的不同素因数的数量。 例子 - 输入 : A = 1、2、3、4 输出 : 2

说明: 这里 g = 1*2*3*4 g 的不同主要因数是 2 和 3 不同素数除数的总数 = 2

以下是我编写的代码,但我得到的输出是错误的 -

  class prime:
  # @param A : list of integers
  # @return an integer
      def prime(self,num):
          if(num>1):
              for i in range(2,num):
                  if(num%i==0):
                      break
                  else:
                      return num


      def solve(self, A):
          prod = 1
          tot = 0
          for i in range(0,len(A)):
              prod = prod*A[i]
          for i in range(0,len(A)):
              if(self.prime(A[i])):
                  if(prod%self.prime(A[i])==0):
                      tot = tot+1
          return tot



  A = [1,2,3,4]
  prime().solve(A))

【问题讨论】:

标签: python python-3.x math prime-factoring


【解决方案1】:

在查看了 OP 的给定输入和输出后,我了解到 OP 想要计算可以完全划分产品(元素的乘积)并将余数设为 0 的素数的数量。 OP 输入 1 - g = 1*2*3*4 和 g 的不同素数除数为 2 和 3。不同素数除数的总数 = 2 OP 输入 2 - g = 96*98*5*41*80,g 的不同素数除数分别为 2、3、5、7 和 41。不同素数除数的总数 = 5

上述问题的代码 -

class Solution:
# @param A : list of integers
# @return an integer
def prime(self,num):
    if(num==1):
        return 0
    for i in range(2,(num//2+1)):
        if(num%i==0):
            return 0
    return num


def solve(self, A):
    prod = 1
    tot = 0
    for i in range(0,len(A)):
        prod = prod*A[i]
    for i in range(1,(prod//2+1)):
        pr = self.prime(i)
        if(pr):
            #77145600
            print("Prime :",pr)
            if(prod%pr==0):
                tot = tot+1
    return tot



A = [96,98,5,41,80]
print(Solution().solve(A))

但是对于这段代码,响应时间非常长。对于此输入 - 96、98、5、41、80,响应时间超过 5 小时。谁能提供更好的解决方案?

我找到了比我上面提到的更好的解决方案-

更新了新代码 -

# Python Program to find the prime number
def prime(num):
    if(num==1):
        return 0
    for i in range(2,(num//2+1)):
        if(num%i==0):
            return 0
    return num

# Python Program to find the factors of a number
def findFactors(x):
   # This function takes a number and finds the factors
   total = 0
   for i in range(1, x + 1):
       if x % i == 0:
           if(prime(i)!=0):
               print("Prime : ",prime(i))
               total+=1
               print("Total : ",total)
    return total               

# change this value for a different result.
num = 77145600
findFactors(num)

findFactors 函数首先找到给定数字的因子,然后使用素数函数检查找到的因子是否为素数。如果它是一个素数,那么我将总数增加 1。 在我的系统上执行时间是 45 秒。

【讨论】:

  • 是的,先生,这就是我想要的输出,但是您的代码需要很长时间才能生成输出。有更好的建议吗?
【解决方案2】:
class prime:
# @param A : list of integers
# @return an integer
  def prime(self,num):
      if num == 2:  # changes
          return num  # changes
      if(num>2):  # changes
          for i in range(2,num):
              if(num%i==0):
                  break
              else:
                  return num


  def solve(self, A):
      prod = 1
      tot = 0
      for i in range(0,len(A)):
          prod = prod*A[i]
      for i in range(0,len(A)):
          if(self.prime(A[i])):
              if(prod%self.prime(A[i])==0):
                  tot = tot+1
      return tot



A = [1,2,3,4]
print(prime().solve(A))

已更改的行被注释为 # 个更改

【讨论】:

  • 输入 A = [96,98,5,41,80] 的输出错误。对于这个输入,我得到的输出是 2,但正确的输出是 5
  • @User 但 A 中只有 2 个素数。
  • @No_one_is_here:代码应该适用于A 的任何值,而不仅仅是问题中给出的值。
  • @Bazingaa 我无法回答这个问题。显然,[96,98,5,41,80] 中只有 2 个素数。正确的输出不能是 5(这是 OP 想要的)。
【解决方案3】:
from math import sqrt

from itertools import count, islice

class Prime:

    def prime(self, n):
        if n < 2:
            return False

        for number in islice(count(2), int(sqrt(n) - 1)):
            if n % number == 0:
                return False

        return True

    def solve(self, A):

        prod = 1
        tot = 0

        for i in range(0, len(A)):
            prod = prod * A[i]

        if(prod<2):
            return 0

        if(prod == 2 or prod == 3):
            return 1

        for i in range(2, prod/2+1):
            if(self.prime(i) and prod % i ==0):
                tot  =tot+1

        return tot

A = [1,2,3,4]
print(Prime().solve(A))

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2017-01-12
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多