C语言程序:如何求一个数的所有奇数因子的和?
在本节中,我们将学习如何高效地求出一个数的所有奇数质因子的和。例如,给定一个数 n = 1092,我们需要求出它的所有因子。1092 的质因子为 2、2、3、7、13。所有奇数因子的和为 3 + 7 + 13 = 23。为了解决这个问题,我们需要遵循以下规则:
如果一个数能被 2 整除,则忽略该因子,并重复除以 2。
现在这个数一定是奇数。从 3 开始,一直到该数的平方根,如果该数能被当前值整除,则将该因子加到总和中,并将该数除以当前值,然后继续。
最后,如果剩下的数是奇数,则也将它加到总和中。
让我们看看算法来更好地理解。
算法
printPrimeFactors(n)
begin sum := 0 while n is divisible by 2, do n := n / 2 done for i := 3 to √𝑛, increase i by 2, do while n is divisible by i, do sum := sum + i n := n / i done done if n > 2, then if n is odd, then sum := sum + n end if end if end
示例
#include<stdio.h> #include<math.h> int sumOddFactors(int n) { int i, sum = 0; while(n % 2 == 0) { n = n/2; //reduce n by dividing this by 2 } //as the number is not divisible by 2 anymore, all factors are odd for(i = 3; i <= sqrt(n); i=i+2){ //i will increase by 2, to get only odd numbers while(n % i == 0) { sum += i; n = n/i; } } if(n > 2) { if(n%2 == 1) sum += n; } return sum; } main() { int n; printf("Enter a number: "); scanf("%d", &n); printf("Sum of all odd prime factors: %d", sumOddFactors(n)); }
输出
Enter a number: 1092 Sum of all odd prime factors: 23
广告