求一个数奇数之和的程序
给定一个数字 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分别为p 1 , p 2 , .. p k的除n的最高幂,即我们可以将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 整除的同时重复除以 n。在这一步之后,我们只得到奇数因子。请注意,2 是唯一的偶素数。
C++
// Formula based Java program
// to find sum of all divisors
// of n.
#include
#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;
}
// This code is contributed by
// Manish Shaw(manishshaw1)
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 Python 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
# removing all powers
# of 2
while (n % 2 == 0) :
n = int(n / 2)
for i in range(3, int(math.sqrt(n)) + 1) :
# While i divides n,
# pri and divide n
count = 0
curr_sum = 1
curr_term = 1
while (n % i == 0) :
count = count + 1
n = int(n / i)
curr_term *= i
curr_sum = curr_sum + curr_term
res = res * curr_sum
# This condition is to
# handle the case when
# n is a prime number.
if (n >= 2) :
res = res * (1 + n)
return res
# Driver code
n = 30
print (sumofoddFactors(n))
# This code is contributed by
# Manish Shaw(manishshaw1)
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.Write(sumofoddFactors(n));
}
}
// This code is contributed by nitin mittal.
PHP
= 2)
$res *= (1 + $n);
return $res;
}
// Driver code
$n = 30;
echo (sumofoddFactors($n));
// This code is contributed by
// Manish Shaw(manishshaw1)
?>
Javascript
输出:
24
有关详细信息,请参阅有关查找数字的奇数和的完整文章!