Hi everyone,

I have just finished the practice problem 3 from chapter 7 and I have commented it in at the top. I did this so I could quickly look at what the problem was without switching back over to pdf. This is it:

First I have to find the prime factors, then add them up, then test whether the resulting number is a prime or not. I couldn't think of another way of doing this without nesting some functions together as they all rely on each other, like a chain.Code:`/*`

Design a program that finds all numbers from 1 to 1000 whose prime factors, when added

together, sum up to a prime number (for example, 12 has prime factors of 2, 2, and 3, which sum to 7, which is prime). Implement the code for that algorithm.

*/

#include <iostream>

#include <cmath>

int getSumOfPrimeFactors(int number);

bool sumOfPrimeFactorsIsPrime(int number);

int main()

{

for (int i = 1; i <= 1000; i++)

{

if (sumOfPrimeFactorsIsPrime(getSumOfPrimeFactors(i)))

/*

BREAKS DOWN LIKE THIS (FOR MY SELF REFERENCE!):

if (sumOfPrimeFactorsIsPrime(getSumOfPrimeFactors(i))) - i is substituted with loop variable, 1 through 1000

--- if (sumOfPrimeFactorsIsPrime(getSumOfPrimeFactors(12))) - sum of prime factors for 12 are 2 x 2 x 3, so added, 2 + 2 + 3 = 7

------ if (sumOfPrimeFactorsIsPrime(7)) - function works out whether 7 is a prime number or not, returns true or false

--------- if (true)

------------print number

*/

{

std::cout << i << " has prime factors that add together to equal a prime number!" << std::endl;

std::cout << "The sum of the prime factors are: " << getSumOfPrimeFactors(i) << std::endl << std::endl;

}

}

}

int getSumOfPrimeFactors(int number) //gets the prime factors of the number (using variable x)

{

int x = 2;

int sumOfPrimeFactors = 0;

while (x <= number)

{

if (number % x == 0)

{

number = number / x;

sumOfPrimeFactors = sumOfPrimeFactors + x; //adds together the prime factors of the number

}

else

{

x++;

}

}

return sumOfPrimeFactors; //returns the value of the prime factors added together to be used in function sumOfPrimeFactorsIsPrime(int number)

}

bool sumOfPrimeFactorsIsPrime(int number) //works out if a number is prime or not, returns true or false accordingly

{

//divide each test number from isPrime(i) by up-to-or-equal the square root to find prime

for ( int i = 2; i <= sqrt(number); i++)

{

if (number % i == 0)

{

return false;

}

}

return true;

}

It seems to work ok, but my question is whether this is the sort of thing you would be expected to do with functions in a problem like this (if that makes sense).

1) Should more be in 'int main()' rather than all dumped into functions?

2) Is nesting functions a standard thing to do in cases like this?

Any advice on how I can improve on things are always welcome. Thanks.

p.s. I apologise for the poor thread title, couldn't think on how to describe this exactly.