Programa en C++ para encontrar la suma de los factores pares de un número

Dado un número n, la tarea es encontrar la suma par de un número.

Ejemplos:

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

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

Sean p1, p2, … pk factores primos de n. Sean a1, a2, ..ak potencias máximas de p1, p2, ..pk respectivamente que dividen n, es decir, podemos escribir n como n = (p1 a1 )*(p2 a2 )* … (pk ak ) .

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

Si el número es impar, entonces no hay factores pares, por lo que simplemente devolvemos 0.

Si el número es par, usamos la fórmula anterior. Solo necesitamos ignorar 2 0 . Todos los demás términos se multiplican para producir una suma de factores pares. Por ejemplo, considere n = 18. Se puede escribir como 2 1 3 2 y el sol de todos los factores es (2 0 + 2 1 )*(3 0 + 3 1 + 3 2 ). si quitamos 2 0 entonces obtenemos la
Suma de factores pares (2)*(1+3+3 2 ) = 26.

Para eliminar un número impar en un factor par, ignoramos entonces 2 0 que es 1. Después de este paso, solo obtenemos factores pares. Tenga en cuenta que 2 es el único primo par.

// Formula based CPP program to find sum of all
// divisors of n.
#include <bits/stdc++.h>
using namespace std;
  
// Returns sum of all factors of n.
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 <= sqrt(n); i++) {
  
        // While i divides n, print i and divide n
        int count = 0, curr_sum = 1, curr_term = 1;
        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 code
int main()
{
    int n = 18;
    cout << sumofFactors(n);
    return 0;
}
Producción:

26

Consulte el artículo completo sobre Encontrar la suma de los factores pares de un número para obtener más detalles.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *