给定数字n,任务是找到奇数因子总和。
例子 :
Input : n = 30
Output : 24
Odd dividers sum 1 + 3 + 5 + 15 = 24
Input : 18
Output : 13
Odd dividers sum 1 + 3 + 9 = 13
先决条件:一个数所有因素的总和
如以上提到的先前文章所述,数的因子之和为
令p 1 ,p 2 ,…p k为n的素因子。令a 1 ,a 2 ,.. a k分别是除以n的p 1 ,p 2 ,.. p k的最高幂,即,我们可以将n写成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)
要找到奇数因子的总和,我们只需要忽略偶数因子及其幂即可。例如,考虑n =18。它可以写成2 1 3 2,并且所有因子的太阳为(1)*(1 + 2)*(1 + 3 + 3 2 )。奇数因子之和(1)*(1 + 3 + 3 2 )= 13。
要删除所有偶数因子,我们将n除以2时将其重复除以。在此步骤之后,我们仅得到奇数因子。请注意,2是唯一的偶数素数。
C++
// Formula based CPP program
// to find sum of all
// divisors of n.
#include
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.*;
import java.math.*;
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[])
throws IOException
{
int n = 30;
System.out.println(sumofoddFactors(n));
}
}
/* This code is contributed by Nikita Tiwari.*/
Python3
# Formula based Python3 program
# to find sum of all divisors
# of n.
import math
# Returns sum of all factors
# of n.
def sumofoddFactors( n ):
# Traversing through all
# prime factors.
res = 1
# ignore even factors by
# of 2
while n % 2 == 0:
n = n // 2
for i in range(3, int(math.sqrt(n) + 1)):
# 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(sumofoddFactors(n))
# This code is contributed by "Sharad_Bhardwaj".
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(String[] argc)
{
int n = 30;
Console.Write(sumofoddFactors(n));
}
}
/* This code is contributed by parashar...*/
PHP
= 2)
$res *= (1 + $n);
return $res;
}
// Driver code
$n = 30;
echo sumofoddFactors($n);
// This code is contributed
// by nitin mittal.
?>
Javascript
输出 :
24