我最近从一本名为“跳入c ++”的课本中得到了一个练习题,并在此处完成此任务:
设计一个程序,查找从1到1000的所有素数,它们的素因数加在一起就等于一个素数(例如,12的素因数2、2和3合计为7,是首要的)。实现该算法的代码。 (提示:如果您不知道找到数字的素因数的算法并且难以弄清楚,可以在Google上查找它!当我告诉您您不需要知道该信息时,是我的意思。数学成为一名程序员。)
我在网上遇到了一个算法,该算法确实达到了目的,并且通过模运算符运行以测试其整数是否被除以返回除以2的所有因子。但是,当它检查ABOVE 2可以将输入数字除以1-1000,例如9(具有3,3的质数)时,该算法使用for循环对数字进行除法并返回这些因数。因此,我将如何记录该值以将其添加到总变量中并返回该值以进行打印。
这是我正在使用的算法[1]:
// Program to print all prime factors and add factors to print total
#include <iostream>
#include <math.h>
using namespace std;
// Function Prototype
void primeFactors(int n);
/* Driver program to test above function */
int main()
{
for(int i=2;i<=10;i++)
{
cout << i << " : ";
primeFactors(i);
}
return 0;
}
// A function to print all prime factors of a given number n
void primeFactors(int n)
{
//Declare Total Variable
int totalPrime = 0;
// Print the number of 2s that divide n
while (n%2 == 0)
{
totalPrime = totalPrime + 2;
cout << "2 ";
n = n/2;
}
// n must be odd at this point. So we can skip
// one element (Note i = i +2)
for (int i = 3; i <= sqrt(n); i = i+2)
{
// While i divides n, print i and divide n
while (n%i == 0)
{
cout << i << " ";
n = n/i;
}
}
// This condition is to handle the case when n
// is a prime number greater than 2
if (n > 2)
{
totalPrime = totalPrime + n;
cout << n << " ";
}
//Format and Output the cumulative values of prime factors and a new line
cout << " = " << totalPrime << endl;
}
如您所见,我尝试在函数的开头声明一个名为total的变量,并在while(n%2 == 0)之后在if(n> 2)之后添加值2。但是,当在程序中出现一个数字(如9)时,由于在算法中使用了if语句,它只会将因数不等于2的因子加到总数上。
因此,您将在输出中得到它:
2 : 2 = 2
3 : 3 = 3
4 : 2 2 = 4
5 : 5 = 5
6 : 2 3 = 5
7 : 7 = 7
8 : 2 2 2 = 6
9 : 3 3 = 0
10 : 2 5 = 7
我打算在for循环中添加add total,但是我认为这超出了范围,因此更改其中的值不会更改输出,并且会将变量保持为已定义的值。
因此,如果计算出的因子在for循环中,从一个数字中求出后,我如何计算素因子的总和?
[1]算法源自:https://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/
答案 0 :(得分:0)
您应在此循环内添加到totalPrime Varaiable
for (int i = 3; i <= sqrt(n); i = i+2)
{
// While i divides n, print i and divide n
while (n%i == 0)
{
cout << i << " ";
//add to sum
totalPrime = totalPrime + i;
n = n/i;
}
}