【问题标题】:How to get common prime factors of a list如何获得列表的共同主要因素
【发布时间】:2020-09-05 14:50:24
【问题描述】:

我正在尝试计算所有非素数共有的素数。我已经通过用户输入从集合整数中计算出非质数。我可以计算 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]。代码确实计算列表中每个整数的素数。但我想显示列表的常见素数。怎么做?

【问题讨论】:

  • 您计算每个数字的因子,然后将它们存储在一个集合中,并将所有集合与 & 组合以获得哪些因子是共同的
  • IndentationError 对于上面的代码 - 也不是 minimal reproducible example - 你没有显示你如何用列表调用它或如何存储结果或你在哪里找到共同的素数

标签: python primes factorization


【解决方案1】:

您可以使用functools.reduce(math.gcd, [10,20,30,60]) 计算 gcd,即 10。然后在其上使用您的代码。

import functools, math

NotPrime = [10,20,30,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

【讨论】:

    【解决方案2】:

    您所要做的就是将素数及其出现的字典保存为变量值对,
    最后,出现次数与输入非素数长度相同的素数是公因数。

    请参考以下代码。

    NotPrime=[10,20,30,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
    

    【讨论】:

    • 您可能想解释一下,您将素数作为键存储在 cf 中,并将它们的出现次数计为值,并打印出所有与提供的数字具有相同数量的值。仅代码的答案是不受欢迎的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多