问题描述
我正在尝试计算所有非素数共有的素数因子。我已经通过用户输入根据设置的整数计算了非素数整数。我可以计算NotPrime列表中存在的所有整数的质数因子。我的代码如下:
for n in NotPrime:
i=1
while(i<=n):
k=0
if(n%i==0):
j=1
while(j<=i):
if(i%j==0):
k=k+1
j=j+1
if(k==2):
print(i)
i=i+1
其中NotPrime
中的整数是[10,20,30,60]。代码确实会计算列表中每个整数的素数。但我想显示列表中的常见主要因素。怎么做?
解决方法
您可以使用functools.reduce(math.gcd,[10,20,30,60])
(即10)来计算gcd。然后在上面使用您的代码。
import functools,math
NotPrime = [10,60]
n = functools.reduce(math.gcd,NotPrime)
i=1
while(i<=n):
k=0
if(n%i==0):
j=1
while(j<=i):
if(i%j==0):
k=k+1
j=j+1
if(k==2):
print(i)
i=i+1
输出:
2
5
,
您要做的就是保留素数及其出现的字典作为变量值对,
最后,与输入非素数的长度相同的素数是常见因素。
请参考以下代码。
NotPrime=[10,60]
cf={}
for n in NotPrime:
i=1
while(i<=n):
k=0
if(n%i==0):
j=1
while(j<=i):
if(i%j==0):
k=k+1
j=j+1
if(k==2):
if i in cf:
cf[i]+=1
else:
cf[i]=1
i=i+1
print("Common factors")
for a in cf:
if (cf[a])==len(NotPrime):
print(a)
输出
Common factors
2
5