Как вернуть результат, содержащий Prime Factor Algroithm для Loops? - PullRequest
0 голосов
/ 17 сентября 2018

Мне недавно дали учебную задачу из учебного пособия под названием «Прыжок в С ++», и вот эта задача:

Разработка программы, которая находит все числа от 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/

1 Ответ

0 голосов
/ 17 сентября 2018

Вы должны добавить внутри этого цикла к 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; 
    } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...