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.