【问题标题】:Sum Of Common Prime Divisors Of 2 Numbers2 个数的公素因数之和
【发布时间】:2015-05-25 17:52:37
【问题描述】:

我很难找到/想出这种方式的解决方案。 我被要求写下一个接收两个整数并返回这些数字的公因数和素数之和的方法。例如:

我有 2 个号码: A=48 和 B=60

48=2*2*2*2*3 60=2*2*3*5

2,2,3 是这两个数的公素因数,因此 2+2+3=7 该方法将返回 7。

我做了一个原始代码:

    int n=48,k=60;
    int i=2;

    while(n!=1)
    {
        if(n%i==0)
        {
            System.out.print(i+" ");
            n/=i;
        }
        else
        {
            i++;        
        }
    }

    i=2;
    System.out.println();

    while(k!=1)
    {
        if(k%i==0)
        {
            System.out.print(i+" ");
            k/=i;
        }
        else
        {
            i++;        
        }
    }

我应该如何结合这两个循环使其同时计算?

【问题讨论】:

  • 你给我们一些伪代码,我认为模数 % 运算符可能很有用。你至少知道如何编写带有整数属性的函数声明吗?
  • 与论坛网站不同,我们不使用“谢谢”、“任何帮助表示赞赏”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
  • 对于可能出现的所有错误,我深表歉意。这是我第一次在这里提问。问题是我在面试工作时收到了这个问题。并让谷歌在我身边寻求帮助。我没有找到任何起点。
  • 找到Greatest Common Divisor, Prime factorize 它,将因子相加并报告总和。您必须查找所有这些步骤的标准 C 代码,以及 Primality Test。一切顺利。
  • “2 个数的常见质因数”、“质数除数”、“gcd 因数”这就是我在 google 中尝试过的。它总是到达 GCD 功能,这不是我需要的。

标签: c methods primes


【解决方案1】:

我给你伪代码,让你翻译成C。首先,欧几里得算法求两个数的最大公约数:

function gcd(a, b)
    if b == 0
        return a
    return gcd(b, a % b)

例如,gcd(48, 60) = 12。接下来是一个通过试除法分解整数的简单函数:

function factors(n)
    f, fs := 2, []
    while f * f <= n
        while n % f == 0
            fs.append(f)
            n := n / f
        f := f + 1
    if n > 1
        fs.append(f)
    return fs

例如,factors(12) = [2, 2, 3]。然后把它们放在一起:

function sum-of-common-factors(x, y)
    return sum(factors(gcd(x, y)))

有更好的方法来分解更大的整数,但这对于面试来说可能就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2021-03-30
    • 2017-05-03
    • 2023-04-07
    • 2019-09-06
    相关资源
    最近更新 更多