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

Dado un número n, la tarea es encontrar la suma de factores impares.
Ejemplos: 

Input : n = 30
Output : 24
Odd dividers sum 1 + 3 + 5 + 15 = 24 

Input : 18
Output : 13
Odd dividers sum 1 + 3 + 9 = 13

Sean p 1 , p 2 , … p k factores primos de n. Sean a 1 , a 2 , .. a k potencias máximas de p 1 , p 2 , .. p k respectivamente que dividen n, es decir, podemos escribir n como n = (p 1 a 1 )*(p 2 a 2 )* … (p k a k ) .  

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

Para encontrar la suma de los factores impares, simplemente debemos ignorar los factores pares y sus poderes. Por ejemplo, considere n = 18. Se puede escribir como 2 1 3 2 y el sol de todos los factores es (1)*(1 + 2)*(1 + 3 + 3 2 ). Suma de factores impares (1)*(1+3+3 2 ) = 13.
Para eliminar todos los factores pares, dividimos repetidamente n mientras sea divisible por 2. Después de este paso, solo obtenemos factores impares. Tenga en cuenta que 2 es el único primo par.  

C++

// 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 sumofoddFactors(int n)
{
    // Traversing through all
    // prime factors.
    int res = 1;
 
    // ignore even factors by
    // removing all powers of
    // 2
    while (n % 2 == 0)
        n = n / 2;
 
    for (int i = 3; i <= sqrt(n); i++)
    {
 
        // While i divides n, print
        // i and divide n
        int count = 0, curr_sum = 1
        int curr_term = 1;
        while (n % i == 0) {
            count++;
 
            n = n / i;
 
            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 = 30;
    cout << sumofoddFactors(n);
    return 0;
}

Java

// Formula based Java program
// to find sum of all
// divisors of n.
import java.io.*;
 
class GFG
{
    // Returns sum of all factors of n.
    static int sumofoddFactors(int n)
    {
        // Traversing through all
        // prime factors.
        int res = 1;
     
        // ignore even factors by
        // removing all powers of
        // 2
        while (n % 2 == 0)
            n = n / 2;
     
        for (int i = 3; i <= Math. sqrt(n); i++)
        {
     
            // While i divides n, print
            // i and divide n
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0)
            {
                count++;
     
                n = n / i;
     
                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
    public static void main (String[] args) {
        int n = 30;
        System.out.println ( sumofoddFactors(n));
    }
}
 
// This code is contributed by vt_m.

Python 3

# Formula based Python 3 program
# to find sum of all  divisors of n
 
# Returns sum of all factors of n
import math
def sumofoddFactors(n):
 
    # Traversing through all prime factors
    res = 1
 
    # ignore even factors by
    # removing all powers of 2
    
    while (n % 2) == 0 :
        n = n / 2
    i=3
    while i <= math.sqrt(n):
     
        # While i divides n, print
        # i and divide n
        count = 0
        curr_sum = 1
        curr_term = 1
        while (n % i) == 0:
            count += 1
            n = n / i
            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
n = 30
print(int(sumofoddFactors(n)))
 
# This code is contributed
# by Azkia Anam.

C#

// Formula based C# program
// to find sum of all
// divisors of n.
using System;
 
class GFG
{
    // Returns sum of all factors of n.
    static int sumofoddFactors(int n)
    {
        // Traversing through all
        // prime factors.
        int res = 1;
     
        // ignore even factors by
        // removing all powers of
        // 2
        while (n % 2 == 0)
            n = n / 2;
     
        for (int i = 3; i <= Math. Sqrt(n); i++)
        {
     
            // While i divides n, print
            // i and divide n
            int count = 0, curr_sum = 1;
            int curr_term = 1;
            while (n % i == 0)
            {
                count++;
     
                n = n / i;
     
                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
    public static void Main ()
    {
        int n = 30;
        Console.WriteLine( sumofoddFactors(n));
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// Formula based PHP program to find
// sum of all divisors of n.
 
// Returns sum of all factors of n.
function sumofoddFactors($n)
{
    // Traversing through all
    // prime factors.
    $res = 1;
 
    // ignore even factors by removing
    // all powers of 2
    while ($n % 2 == 0)
        $n = $n / 2;
 
    for ($i = 3; $i <= sqrt($n); $i++)
    {
 
        // While i divides n, print
        // i and divide n
        $count = 0;
        $curr_sum = 1 ;
        $curr_term = 1;
        while ($n % $i == 0)
        {
            $count++;
 
            $n = (int) $n / $i;
 
            $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
$n = 30;
echo sumofoddFactors($n);
 
// This code is contributed
// by Sach_Code
?>

Javascript

<script>
// Formula based javascript program
// to find sum of all
// divisors of n.
 
    // Returns sum of all factors of n.
    function sumofoddFactors(n)
    {
     
        // Traversing through all
        // prime factors.
        var res = 1;
 
        // ignore even factors by
        // removing all powers of
        // 2
        while (n % 2 == 0)
            n = n / 2;
 
        for (var i = 3; i <= Math.sqrt(n); i++) {
 
            // While i divides n, print
            // i and divide n
            var count = 0, curr_sum = 1;
            var curr_term = 1;
            while (n % i == 0) {
                count++;
 
                n = n / i;
 
                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
     
        var n = 30;
        document.write(sumofoddFactors(n));
 
// This code is contributed by gauravrajput1
</script>

Producción: 

24

Complejidad de tiempo: O (n 1/2 )

Espacio auxiliar: O(1)
Consulte el artículo completo sobre Encontrar la suma de los factores impares 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 *