给定一个数字n,任务是找到奇数因子和。 例如:
null
Input : n = 30Output : 24Odd dividers sum 1 + 3 + 5 + 15 = 24 Input : 18Output : 13Odd dividers sum 1 + 3 + 9 = 13
让p 1. P 2. ,…p K 是 主要因素 让我们 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。在这一步之后,我们只得到奇数因子。请注意,2是唯一的偶数素数。
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 Java 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> |
输出:
24
时间复杂性: O(n) 1/2 )
辅助空间: O(1) 请参阅完整的文章 求一个数的奇数因子之和 更多细节!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END