Хорошо, поэтому я пишу программу (на C ++), которая должна принимать число, пройти его, выяснить, являются ли его простые числа, если это так, добавить это к сумме, а затем вывести сумму всехпростых факторов вмененного числа.
Моя программа, кажется, успешно делает это, однако у нее есть 2 проблемы,
1) Число, которое я должен проверить, чтобы увидеть сумму простых факторовэто число (600851475143), но оно слишком велико для типа int. Я не уверен, какой другой тип переменной использовать или какие типы переменных нужно изменить. Мне бы очень хотелось получить четкое объяснение этого, если это вообще возможно.
2) По какой-то причине, когда программа проверяет, является ли 1 коэффициентом числа, а затем проверяет, является ли 1 простым, она говорит, что 1 является простым, хотя первый шаг функции для проверкиПосмотрим, простое ли это то, что если оно равно 1, то оно не простое. Я нашел решение для этого, сказав ему вычесть 1 из самого последнего значения для суммы всех простых факторов. Однако этоисправить, на самом деле не найти проблему.Если кто-то может указать, по крайней мере, где проблема, я был бы признателен!
Вот код, если у вас есть вопросы, пожалуйста, задавайте!
#include <iostream>
using namespace std;
bool prime (int recievedvalue) { //starts a function that returns a boolean with parameters being a factor from a number
int j =1;
int remainderprime = 0;
bool ended = false;
while (ended == false){ //runs loop while primality is undetermined
if (recievedvalue == 1){ //if the recieved value is a 1 it isn't prime
//not prime
break; // breaks loop
return false;
}
remainderprime=recievedvalue%j; //gives a remainder for testing
if ((remainderprime==0 && j>2) && (j!=recievedvalue || j == 4)){ //shows under which conditions it isn't prime
ended=true;
//not prime
return false;
}
else if (j==1){
j++;
}
else if ( recievedvalue==2 || j==recievedvalue ){ // shows what conditions it is prime
ended = true;
//prime
return true;
}
else {
j++;
}
}
}
int multiple(int tbfactor){ //factors and then checks to see if factors are prime, then adds all prime factors together
//parameter is number to be factored
int sum = 0;
bool primetest = false;
int remainderfact;
int i=1;
while (i<=tbfactor){ //checks if a i is a factor of tbfactor
remainderfact=tbfactor%i;
if (remainderfact==0){ //if it is a factor it checks if it is a prime
primetest = prime(i);
}
if (primetest ==true){ //if it is prime it add that to the sum
sum += i;
primetest=false;
}
i++;
}
sum --; // for some reason it always ads 1 as a prime number so this is my fix for it
return sum;
}
int main()
{
int input;
int output;
cout << "Enter number to find the sum of all it's prime factors: ";
cin >> input;
output = multiple(input);
cout << output;
return 0;
}
Я действительно новичок в этомПримерно через несколько дней, так что я очень незнаком с вещами прямо сейчас, поэтому, пожалуйста, объясните мне легко!Я с нетерпением жду вашей помощи!Спасибо!