#include #include #include const int NUMBER = 20; bool isPrime(int number); int getNextPrime(int number); std::map getPrimeFactors(int number); int getRangeLeastCommonMultiple(int maxNumber); //This program finds the smallest number that is evenly divisible by all numbers from 1 to NUMBERS int main() { return getRangeLeastCommonMultiple(NUMBER); } bool isPrime(int number) { if(number == 2) { return true; } else { for(int i=3; i getPrimeFactors(int number) { std::map factors; for(int i=2; number>1; i=getNextPrime(i)) { while(!(number%i)) { number/=i; if(factors.find(i)==factors.end()) { factors[i]=1; } else { ++(factors[i]); } } } return factors; } int getRangeLeastCommonMultiple(int maxNumber) { //get the prime factor representations of all numbers from 2 to the max number std::vector> primeFactorRepresentations; for(int i=2; i<=maxNumber; ++i) { primeFactorRepresentations.push_back(getPrimeFactors(i)); } //get the highest exponent of each prime factor std::map factorList; for(auto primeFactors = primeFactorRepresentations.begin(); primeFactors != primeFactorRepresentations.end(); ++primeFactors) { for(auto factor = (*primeFactors).begin(); factor != (*primeFactors).end(); ++factor) { auto fac = factorList.find((*factor).first); if(fac == factorList.end()) { factorList[(*factor).first] = (*factor).second; } else if((*factor).second > (*fac).second) { factorList[(*factor).first] = (*factor).second; } } } int evenDivNumber = 1; for(auto factor = factorList.begin(); factor!= factorList.end(); ++factor) { evenDivNumber *= std::pow((double) (*factor).first, (*factor).second); } return evenDivNumber; }