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

更新于: 2019年7月30日

1K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告