如何获得列表的共同主要因素

问题描述

我正在尝试计算所有非素数共有的素数因子。我已经通过用户输入根据设置的整数计算了非素数整数。我可以计算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