📜  Java程序查找数字的偶数因子之和

📅  最后修改于: 2022-05-13 01:58:09.330000             🧑  作者: Mango

Java程序查找数字的偶数因子之和

给定一个数 n,任务是找到一个数的偶因数和。

例子:

Input : 30
Output : 48
Even dividers sum 2 + 6 + 10 + 30 = 48

Input : 18
Output : 26
Even dividers sum 2 + 6 + 18 = 26

设 p1, p2, ... pk 是 n 的素数。令 a1, a2, .. ak 分别为 p1, p2, .. pk 除以 n 的最高幂,即我们可以将 n 写为n = (p1 a1 )*(p2 a2 )* ... (pk ak )

Sum of divisors = (1 + p1 + p12 ... p1a1) * 
                  (1 + p2 + p22 ... p2a2) *
                  ...........................
                  (1 + pk + pk2 ... pkak) 

如果 number 是奇数,则没有偶数因子,所以我们只返回 0。

如果数字是偶数,我们使用上面的公式。我们只需要忽略 2 0 。所有其他项相乘以产生偶数因子和。例如,考虑 n = 18。它可以写成 2 1 3 2并且所有因子的太阳是 (2 0 + 2 1 )*(3 0 + 3 1 + 3 2 )。如果我们删除 2 0那么我们得到
偶数因子之和 (2)*(1+3+3 2 ) = 26。

为了去除偶数因子中的奇数,我们忽略 2 0即 1。在这一步之后,我们只得到偶数因子。请注意,2 是唯一的偶素数。

// Formula based Java program to
// find sum of all divisors of n.
import java.util.*;
import java.lang.*;
  
public class GfG {
  
    // Returns sum of all factors of n.
    public static int sumofFactors(int n)
    {
        // If n is odd, then there
        // are no even factors.
        if (n % 2 != 0)
            return 0;
  
        // Traversing through all prime
        // factors.
        int res = 1;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            int count = 0, curr_sum = 1;
            int curr_term = 1;
  
            // While i divides n, print i and
            // divide n
            while (n % i == 0) {
                count++;
  
                n = n / i;
  
                // here we remove the 2^0 that
                // is 1. All other factors
                if (i == 2 && count == 1)
                    curr_sum = 0;
  
                curr_term *= i;
                curr_sum += curr_term;
            }
  
            res *= curr_sum;
        }
  
        // This condition is to handle the
        // case when n is a prime number.
        if (n >= 2)
            res *= (1 + n);
  
        return res;
    }
  
    // Driver function
    public static void main(String argc[])
    {
        int n = 18;
        System.out.println(sumofFactors(n));
    }
}
  
/* This code is contributed by Sagar Shukla */
输出:
26

有关详细信息,请参阅有关查找一个数的偶数因子和的完整文章!