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