Мне недавно дали учебную задачу из учебного пособия под названием «Прыжок в С ++», и вот эта задача:
Разработка программы, которая находит все числа от 1 до 1000, простые числафакторы, сложенные вместе, суммируют до простого числа (например, 12 имеет простые множители 2, 2 и 3, которые в сумме равны 7, что является простым).Реализуйте код для этого алгоритма.(Подсказка: если вы не знаете алгоритм для определения основных факторов числа и не можете его выяснить, все в порядке, чтобы найти его в Google! Я имел в виду, когда сказал вам, что вам не нужно знатьматематика, чтобы быть программистом.)
В сети я наткнулся на алгоритм, который выполняет свою функцию и возвращает все факторы числа путем деления на два, пока он проходит через оператор модуля для проверки его делимости.,Однако, когда он проверяет, какое значение ВЫШЕ 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 в начале функции и добавить значение 2 через некоторое время (n% 2 == 0) и на n после оператора if (n> 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, однако это выходит за рамки, так что я считаю, что изменение значения внутри не изменит выход и сохранит переменную вэто уже определенное значение.
Как бы мне рассчитать общую сумму простых множителей при сложении после того, как они были вычислены из числа, если вычисленный коэффициент находится в цикле for?
[1]Алгоритм получен из: https://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/