[英]Find total count of Distinct Prime in given array using Python
問題是這樣的-給定的數組A具有N個整數。 假設G是A的所有元素的乘積。您必須找到G的不同素數的數量。示例-輸入:A = 1,2,3,4輸出:2
說明:這里g = 1 * 2 * 3 * 4,且g的不同質數為2和3。
下面是我寫的代碼,但是我得到的輸出是錯誤的-
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))
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))
更改的行用#個更改注釋
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))
在經過OP的給定輸入和輸出后,我了解到OP希望計算可以完全除掉prod(元素乘積)並將剩余數設為0的素數。輸入1除以OP-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秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.