使用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<iostream>

#include<cmath>

using namespace std;

int sumOddFactors(int n){

   int i, sum = 0;

   while(n % 2 == 0){

      n = n/2; //reduce n by dividing this by 2

   }

   //由于该数字不再可以被2整除,因此所有因素都是奇数

   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;

   cout << "Enter a number: ";

   cin >> n;

   cout <<"Sum of all odd prime factors: "<< sumOddFactors(n);

}

输出结果

Enter a number: 1092

Sum of all odd prime factors: 23

以上是 使用C ++查找数字的奇数因子之和。 的全部内容, 来源链接: utcz.com/z/335203.html

回到顶部