mirror of
https://bitbucket.org/Mattrixwv/projecteulercpp.git
synced 2025-12-06 17:13:59 -05:00
Moved files around to better match C++ norms
Changed results to match other languages
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problem.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-04-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//This is an abstract base class to allow polymorphism for the individual problems
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
@@ -35,7 +35,6 @@ protected:
|
||||
mee::Stopwatch timer; //Used to determine your algorithm's run time
|
||||
bool solved; //Holds true after the problem has been solved
|
||||
class Unsolved{}; //An exception class thrown if you try to access something before it has been solved
|
||||
std::stringstream result; //Get the result of the problem
|
||||
public:
|
||||
//Constructors
|
||||
Problem() : solved(false){
|
||||
@@ -67,20 +66,14 @@ public:
|
||||
}
|
||||
//Reset the problem so it can be run again
|
||||
virtual void reset(){
|
||||
result.str(std::string());
|
||||
timer.reset();
|
||||
solved = false;
|
||||
}
|
||||
//Return a string with the solution to the problem
|
||||
virtual std::string getResults(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
return result.str();
|
||||
}
|
||||
//Pure virtual functions
|
||||
virtual void solve() = 0; //Solve the problem
|
||||
//Solve the problem
|
||||
virtual void solve() = 0;
|
||||
//Return a string with the solution to the problem
|
||||
virtual std::string getResult() = 0;
|
||||
};
|
||||
|
||||
#endif //PROBLEM_HPP
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/ProblemSelection.hpp
|
||||
//Mattrixwv
|
||||
//ProjectEuler/ProjectEulerCPP/headers/ProblemSelection.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-08-20
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//This is a header file with a few functions to help select and run problems
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
@@ -26,39 +26,39 @@
|
||||
|
||||
#include <iostream>
|
||||
#include "Algorithms.hpp"
|
||||
#include "Headers/Problem1.hpp"
|
||||
#include "Headers/Problem2.hpp"
|
||||
#include "Headers/Problem3.hpp"
|
||||
#include "Headers/Problem4.hpp"
|
||||
#include "Headers/Problem5.hpp"
|
||||
#include "Headers/Problem6.hpp"
|
||||
#include "Headers/Problem7.hpp"
|
||||
#include "Headers/Problem8.hpp"
|
||||
#include "Headers/Problem9.hpp"
|
||||
#include "Headers/Problem10.hpp"
|
||||
#include "Headers/Problem11.hpp"
|
||||
#include "Headers/Problem12.hpp"
|
||||
#include "Headers/Problem13.hpp"
|
||||
#include "Headers/Problem14.hpp"
|
||||
#include "Headers/Problem15.hpp"
|
||||
#include "Headers/Problem16.hpp"
|
||||
#include "Headers/Problem17.hpp"
|
||||
#include "Headers/Problem18.hpp"
|
||||
#include "Headers/Problem19.hpp"
|
||||
#include "Headers/Problem20.hpp"
|
||||
#include "Headers/Problem21.hpp"
|
||||
#include "Headers/Problem22.hpp"
|
||||
#include "Headers/Problem23.hpp"
|
||||
#include "Headers/Problem24.hpp"
|
||||
#include "Headers/Problem25.hpp"
|
||||
#include "Headers/Problem26.hpp"
|
||||
#include "Headers/Problem27.hpp"
|
||||
#include "Headers/Problem28.hpp"
|
||||
#include "Headers/Problem29.hpp"
|
||||
#include "Headers/Problem30.hpp"
|
||||
#include "Headers/Problem31.hpp"
|
||||
#include "Headers/Problem32.hpp"
|
||||
#include "Headers/Problem67.hpp"
|
||||
#include "Problems/Problem1.hpp"
|
||||
#include "Problems/Problem2.hpp"
|
||||
#include "Problems/Problem3.hpp"
|
||||
#include "Problems/Problem4.hpp"
|
||||
#include "Problems/Problem5.hpp"
|
||||
#include "Problems/Problem6.hpp"
|
||||
#include "Problems/Problem7.hpp"
|
||||
#include "Problems/Problem8.hpp"
|
||||
#include "Problems/Problem9.hpp"
|
||||
#include "Problems/Problem10.hpp"
|
||||
#include "Problems/Problem11.hpp"
|
||||
#include "Problems/Problem12.hpp"
|
||||
#include "Problems/Problem13.hpp"
|
||||
#include "Problems/Problem14.hpp"
|
||||
#include "Problems/Problem15.hpp"
|
||||
#include "Problems/Problem16.hpp"
|
||||
#include "Problems/Problem17.hpp"
|
||||
#include "Problems/Problem18.hpp"
|
||||
#include "Problems/Problem19.hpp"
|
||||
#include "Problems/Problem20.hpp"
|
||||
#include "Problems/Problem21.hpp"
|
||||
#include "Problems/Problem22.hpp"
|
||||
#include "Problems/Problem23.hpp"
|
||||
#include "Problems/Problem24.hpp"
|
||||
#include "Problems/Problem25.hpp"
|
||||
#include "Problems/Problem26.hpp"
|
||||
#include "Problems/Problem27.hpp"
|
||||
#include "Problems/Problem28.hpp"
|
||||
#include "Problems/Problem29.hpp"
|
||||
#include "Problems/Problem30.hpp"
|
||||
#include "Problems/Problem31.hpp"
|
||||
#include "Problems/Problem32.hpp"
|
||||
#include "Problems/Problem67.hpp"
|
||||
|
||||
|
||||
//Setup the problem numbers
|
||||
@@ -122,7 +122,7 @@ void solveProblem(Problem* problem){
|
||||
//Solve the problem
|
||||
problem->solve();
|
||||
//Print the results
|
||||
std::cout << problem->getResults()
|
||||
std::cout << problem->getResult()
|
||||
<< "\nIt took " << problem->getTime() << " to solve this problem.\n\n" << std::endl;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem1.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem1.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of all the multiples of 3 or 5 that are less than 1000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getSum() const; //Returns the requested sum
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem10.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem10.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the primes below two million
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getSum() const; //Returns the sum that was requested
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem11.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem11.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
|
||||
/*
|
||||
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
|
||||
@@ -66,6 +66,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<int> getNumbers() const; //Returns the numbers that were being searched
|
||||
int getProduct() const; //Returns the product that was requested
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem12.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem12.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-27-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the value of the first triangle number to have over five hundred divisors?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/* Copyright (C) 2020 Matthew Ellison
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int64_t getTriangularNumber() const; //Returns the triangular number
|
||||
int64_t getLastNumberAdded() const; //Get the final number that was added to the triangular number
|
||||
std::vector<int64_t> getDivisorsOfTriangularNumber() const; //Returns the list of divisors of the requested number
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem13.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem13.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Work out the first ten digits of the sum of the following one-hundred 50-digit numbers
|
||||
/*
|
||||
37107287533902102798797998220837590246510135740250
|
||||
@@ -154,6 +154,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<mpz_class> getNumbers() const; //Returns the list 50-digit numbers
|
||||
mpz_class getSum() const; //Returns the sum of the 50-digit numbers
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem14.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem14.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
/*
|
||||
The following iterative sequence is defined for the set of positive integers:
|
||||
n → n/2 (n is even)
|
||||
@@ -53,6 +53,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getLength() const; //Returns the length of the requested chain
|
||||
uint64_t getStartingNumber() const; //Returns the starting number of the requested chain
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem15.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem15.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many routes from the top left corner to the bottom right corner are there through a 20×20 grid if you can only move right and down?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getNumberOfRoutes() const; //Returns the number of routes found
|
||||
};
|
||||
/* Results:
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem16.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem16.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the digits of the number 2^1000?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -49,6 +49,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
mpz_class getNumber() const; //Returns the number that was calculated
|
||||
int getSum() const; //Return the sum of the digits of the number
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem17.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem17.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-05-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getLetterCount() const; //Returns the number of letters asked for
|
||||
};
|
||||
/* Results:
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem18.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem18.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-01-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the maximum total from top to bottom
|
||||
/*
|
||||
75
|
||||
@@ -81,6 +81,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::string getPyramid(); //Returns the pyramid that was traversed as a string
|
||||
std::string getTrail(); //Returns the trail the algorithm took as a string
|
||||
int getTotal() const; //Returns the total that was asked for
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem19.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem19.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
|
||||
/*
|
||||
You are given the following information, but you may prefer to do some research for yourself.
|
||||
@@ -62,6 +62,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getTotalSundays() const; //Returns the total sundays that were asked for
|
||||
};
|
||||
/* Results
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem2.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem2.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//The sum of the even Fibonacci numbers less than 4,000,000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getSum() const; //Returns the requested sum
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem20.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem20.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-07-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the digits of 100!?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
mpz_class getNumber() const; //Returns the number 100!
|
||||
std::string getNumberString() const; //Returns the number 100! in a string
|
||||
uint64_t getSum() const; //Returns the sum of the digits of 100!
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem21.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem21.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-08-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Evaluate the sum of all the amicable numbers under 10000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -49,6 +49,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<uint64_t> getAmicable() const; //Returns a vector with all of the amicable numbers calculated
|
||||
uint64_t getSum() const; //Returns the sum of all of the amicable numbers
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem22.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem22.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-09-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the total of all the name scores in the file?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -49,6 +49,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<std::string> getNames() const; //Returns the vector of the names being scored
|
||||
uint64_t getNameScoreSum() const; //Returns the sum of the names scores
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem23.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem23.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-09-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getSum() const; //Returns the sum of the numbers asked for
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem24.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem24.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-11-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<std::string> getPermutationsList() const; //Returns a vector with all of the permutations
|
||||
std::string getPermutation() const; //Returns the specific permutations you are looking for
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem25.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem25.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-13-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the index of the first term in the Fibonacci sequence to contain 1000 digits?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
mpz_class getNumber() const; //Returns the Fibonacci number asked for
|
||||
std::string getNumberString() const; //Returns the Fibonacci number asked for as a string
|
||||
mpz_class getIndex() const; //Returns the index of the requested Fibonacci number
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem26.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem26.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-28-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
unsigned int getLongestCycle() const; //Returns the length of the longest cycle
|
||||
unsigned int getLongestNumber() const; //Returns the denominator that starts the longest cycle
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem27.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem27.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-14-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the product of the coefficients, |a| < 1000 and |b| <= 1000, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n=0.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int64_t getTopA() const; //Returns the top A that was generated
|
||||
int64_t getTopB() const; //Returns the top B that was generated
|
||||
int64_t getTopN() const; //Returns the top N that was generated
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem28.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem28.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-21-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed by starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<std::vector<int>> getGrid() const; //Returns the grid
|
||||
uint64_t getSum() const; //Returns the sum of the diagonals
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem29.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem29.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-06-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many distinct terms are in the sequence generated by a^b for 2 <= a <= 100 and 2 <= b <= 100?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -53,6 +53,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
unsigned int getBottomA() const; //Returns the lowest possible value for a
|
||||
unsigned int getTopA() const; //Returns the highest possible value for a
|
||||
unsigned int getBottomB() const; //Returns the lowest possible value for b
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem3.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem3.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//The largest prime factor of 600851475143
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<uint64_t> getFactors() const; //Returns the list of factors of the number
|
||||
uint64_t getLargestFactor() const; //Returns the largest factor of the number
|
||||
uint64_t getGoalNumber() const; //Returns the number
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem30.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem30.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-27-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getTopNum() const; //This returns the top number to be checked
|
||||
std::vector<uint64_t> getListOfSumOfFifths() const; //This returns a copy of the vector holding all the numbers that are the sum of the fifth power of their digits
|
||||
uint64_t getSumOfList() const; //This returns the sum of all entries in sumOfFifthNumbers
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem31.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem31.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 06-19-20
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many different ways can £2 be made using any number of coins?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int getPermutations() const; //Returns the number of correct permutations of the coins
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem32.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem32.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-27-20
|
||||
//Modified: 07-27-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -66,13 +66,11 @@ public:
|
||||
//Constructor
|
||||
Problem32();
|
||||
//Operational functions
|
||||
//Solve the problem
|
||||
void solve();
|
||||
//Reset the problem so it can be run again
|
||||
void reset();
|
||||
void solve(); //Solve the problem
|
||||
void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
//Returns the sum of the pandigitals
|
||||
int64_t getSumOfPandigitals();
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int64_t getSumOfPandigitals(); //Returns the sum of the pandigitals
|
||||
};
|
||||
|
||||
/* Results:
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem4.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem4.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the largest palindrome made from the product of two 3-digit numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::vector<uint64_t> getPalindromes() const; //Returns the list of all palindromes
|
||||
uint64_t getLargestPalindrome() const; //Returns the largest palindrome
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem5.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem5.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -43,6 +43,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int getNumber() const; //Returns the requested number
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem6.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem6.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getSumOfSquares() const; //Returns the sum of all the squares
|
||||
uint64_t getSquareOfSum() const; //Returns the square of all of the sums
|
||||
uint64_t getDifference() const; //Returns the requested difference
|
||||
@@ -1,4 +1,4 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem67.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem67.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-02-18
|
||||
//Modified: 07-09-20
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem7.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem7.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the 10001th prime number?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
uint64_t getPrime() const; //Returns the requested prime number
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem8.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem8.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
|
||||
/*
|
||||
73167176531330624919225119674426574742355349194934
|
||||
@@ -68,6 +68,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
std::string getLargestNums() const; //Returns the string of numbers that produces the largest product
|
||||
uint64_t getLargestProduct() const; //Returns the requested product
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Headers/Problem9.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/Problems/Problem9.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product of abc.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
virtual void solve(); //Solve the problem
|
||||
virtual void reset(); //Reset the problem so it can be run again
|
||||
//Gets
|
||||
virtual std::string getResult(); //Return a string with the solution to the problem
|
||||
int getSideA() const; //Returns the length of the first side
|
||||
int getSideB() const; //Returns the length of the second side
|
||||
int getSideC() const; //Returns the length of the hyp
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/benchmark.hpp
|
||||
//ProjectEuler/ProjectEulerCPP/headers/benchmark.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-08-20
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//These are functions that help determine an average run time for the problems
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
@@ -199,7 +199,7 @@ std::string getBenchmarkResults(Problem* problem, double totalTime, unsigned int
|
||||
std::string timeResults = mee::Stopwatch::getStr(totalTime);
|
||||
//Tally the results
|
||||
std::stringstream results;
|
||||
results << "\n\n" << problem->getResults();
|
||||
results << "\n\n" << problem->getResult();
|
||||
results << "\nIt took an average of " << timeResults << " to run this problem over " << timesRun << " iterations\n\n" << std::endl;
|
||||
return results.str();
|
||||
}
|
||||
25
makefile
25
makefile
@@ -4,7 +4,10 @@ LIBFLAGS = -shared -std=c++17 -O3 -fPIC -Wall
|
||||
EXEFLAGS = -Wall -std=c++11 -O3 -Wl,-rpath,'$$ORIGIN/lib'
|
||||
LINKEDLIBS = -lgmp -lgmpxx
|
||||
PROBLEM_NUMBERS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 67
|
||||
PROBLEM_FILES = $(patsubst %,Source/libProblem%.cpp,$(PROBLEM_NUMBERS))
|
||||
SOURCE_DIR = src
|
||||
PROBLEM_DIR = $(SOURCE_DIR)/Problems
|
||||
INCLUDE_DIR = headers
|
||||
PROBLEM_FILES = $(patsubst %,$(PROBLEM_DIR)/libProblem%.cpp,$(PROBLEM_NUMBERS))
|
||||
LIBDIR = ./lib
|
||||
LIBS = $(patsubst %, -lProblem%,$(PROBLEM_NUMBERS))
|
||||
|
||||
@@ -24,24 +27,24 @@ moveBin:
|
||||
mv ProjectEuler.exe lib/ProjectEuler.exe
|
||||
|
||||
#Building the Libraries
|
||||
$(LIBDIR)/libProblem%.so: Source/Problem%.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS)
|
||||
$(LIBDIR)/libProblem67.so: Source/Problem67.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS) -L $(LIBDIR) -lProblem18
|
||||
$(LIBDIR)/libProblem%.so: $(PROBLEM_DIR)/Problem%.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< -I $(INCLUDE_DIR) $(LINKEDLIBS)
|
||||
$(LIBDIR)/libProblem67.so: $(PROBLEM_DIR)/Problem67.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< -I $(INCLUDE_DIR) $(LINKEDLIBS) -L $(LIBDIR) -lProblem18
|
||||
libsMulti:
|
||||
$(MAKE) libs -j $(NUMCORES)
|
||||
|
||||
#Building the Libraries for Windows
|
||||
$(LIBDIR)/libProblem%.dll: Source/Problem%.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS)
|
||||
$(LIBDIR)/libProblem67.dll: Source/Problem67.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< $(LINKEDLIBS) -L $(LIBDIR) -lProblem18
|
||||
$(LIBDIR)/libProblem%.dll: $(PROBLEM_DIR)/Problem%.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< -I $(INCLUDE_DIR) $(LINKEDLIBS)
|
||||
$(LIBDIR)/libProblem67.dll: $(PROBLEM_DIR)/Problem67.cpp
|
||||
$(CXX) $(LIBFLAGS) -o $@ $< -I $(INCLUDE_DIR) $(LINKEDLIBS) -L $(LIBDIR) -lProblem18
|
||||
libsWindowsMulti:
|
||||
$(MAKE) libsWindows -j $(NUMCORESWIN)
|
||||
|
||||
#Building the executable
|
||||
ProjectEuler: main.cpp
|
||||
$(CXX) $(EXEFLAGS) -o $@.exe $< -L $(LIBDIR) $(LIBS) $(LINKEDLIBS)
|
||||
ProjectEuler: $(SOURCE_DIR)/main.cpp
|
||||
$(CXX) $(EXEFLAGS) -o $@.exe $< -I $(INCLUDE_DIR) -L $(LIBDIR) $(LIBS) $(LINKEDLIBS)
|
||||
|
||||
|
||||
#Clean up/Remove all files and folders created
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem1.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-10-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of all the multiples of 3 or 5 that are less than 1000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <cinttypes>
|
||||
#include <vector>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem1.hpp"
|
||||
#include "Problems/Problem1.hpp"
|
||||
|
||||
|
||||
//The highest number to be tested
|
||||
@@ -62,13 +61,9 @@ void Problem1::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The sum of all the numbers < " << MAX_NUMBER + 1 << " that are divisible by 3 or 5 is " << fullSum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem1::reset(){
|
||||
Problem::reset();
|
||||
@@ -76,6 +71,15 @@ void Problem1::reset(){
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem1::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of all the numbers < " << MAX_NUMBER + 1 << " that are divisible by 3 or 5 is " << fullSum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the requested sum
|
||||
uint64_t Problem1::getSum() const{
|
||||
//If the prblem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem10.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the primes below two million
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem10.hpp"
|
||||
#include "Problems/Problem10.hpp"
|
||||
|
||||
|
||||
//The largest number to check for primes
|
||||
@@ -53,19 +52,25 @@ void Problem10::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The sum of all the primes less than " << GOAL_NUMBER + 1 << " is " << sum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem10::reset(){
|
||||
Problem::reset();
|
||||
sum = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem10::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of all the primes less than " << GOAL_NUMBER + 1 << " is " << sum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the sum that was requested
|
||||
uint64_t Problem10::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem11.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
|
||||
/*
|
||||
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
|
||||
@@ -49,8 +49,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem11.hpp"
|
||||
#include "Problems/Problem11.hpp"
|
||||
|
||||
|
||||
//This is the grid of number that we will be working with
|
||||
@@ -174,20 +173,26 @@ void Problem11::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The greatest product of 4 number in a line is " << mee::getProduct(greatestProduct)
|
||||
<< "\nThe numbers are " << greatestProduct.at(0) << ' ' << greatestProduct.at(1) << ' ' << greatestProduct.at(2) << ' ' << greatestProduct.at(3);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem11::reset(){
|
||||
Problem::reset();
|
||||
greatestProduct.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem11::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The greatest product of 4 number in a line is " << mee::getProduct(greatestProduct)
|
||||
<< "\nThe numbers are " << greatestProduct.at(0) << ' ' << greatestProduct.at(1) << ' ' << greatestProduct.at(2) << ' ' << greatestProduct.at(3);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the numbers that were being searched
|
||||
std::vector<int> Problem11::getNumbers() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -196,7 +201,6 @@ std::vector<int> Problem11::getNumbers() const{
|
||||
}
|
||||
return greatestProduct;
|
||||
}
|
||||
|
||||
//Returns the product that was requested
|
||||
int Problem11::getProduct() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem12.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-27-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the value of the first triangle number to have over five hundred divisors?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/* Copyright (C) 2020 Matthew Ellison
|
||||
@@ -26,8 +26,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem12.hpp"
|
||||
#include "Problems/Problem12.hpp"
|
||||
|
||||
|
||||
//The number of divisors that you want
|
||||
@@ -66,13 +65,9 @@ void Problem12::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The triangular number " << sum << " is a sum of all numbers >= " << counter - 1 << " and has " << divisors.size() << " divisors";
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem12::reset(){
|
||||
Problem::reset();
|
||||
@@ -81,6 +76,16 @@ void Problem12::reset(){
|
||||
counter = 2;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem12::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The triangular number " << sum << " is a sum of all numbers >= " << counter - 1 << " and has " << divisors.size() << " divisors";
|
||||
return result.str();
|
||||
}
|
||||
//Returns the triangular number
|
||||
int64_t Problem12::getTriangularNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -89,7 +94,6 @@ int64_t Problem12::getTriangularNumber() const{
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
//Get the final number that was added to the triangular number
|
||||
int64_t Problem12::getLastNumberAdded() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -98,7 +102,6 @@ int64_t Problem12::getLastNumberAdded() const{
|
||||
}
|
||||
return counter - 1;
|
||||
}
|
||||
|
||||
//Returns the list of divisors of the requested number
|
||||
std::vector<int64_t> Problem12::getDivisorsOfTriangularNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -107,7 +110,6 @@ std::vector<int64_t> Problem12::getDivisorsOfTriangularNumber() const{
|
||||
}
|
||||
return divisors;
|
||||
}
|
||||
|
||||
//Returns the number of divisors of the requested number
|
||||
size_t Problem12::getNumberOfDivisors() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem13.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Work out the first ten digits of the sum of the following one-hundred 50-digit numbers
|
||||
/*
|
||||
37107287533902102798797998220837590246510135740250
|
||||
@@ -134,8 +134,7 @@
|
||||
#include "gmpxx.h" //This is part of the gmp library
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem13.hpp"
|
||||
#include "Problems/Problem13.hpp"
|
||||
|
||||
|
||||
//A function to set the nums vector
|
||||
@@ -273,14 +272,9 @@ void Problem13::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The sum of all " << nums.size() << " numbers is " << sum
|
||||
<< "\nThe first 10 digits of the sum of the numbers is " << sum.get_str().substr(0, 10);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem13::reset(){
|
||||
Problem::reset();
|
||||
@@ -289,6 +283,17 @@ void Problem13::reset(){
|
||||
reserveVectors();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem13::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of all " << nums.size() << " numbers is " << sum
|
||||
<< "\nThe first 10 digits of the sum of the numbers is " << sum.get_str().substr(0, 10);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the list 50-digit numbers
|
||||
std::vector<mpz_class> Problem13::getNumbers() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -297,7 +302,6 @@ std::vector<mpz_class> Problem13::getNumbers() const{
|
||||
}
|
||||
return nums;
|
||||
}
|
||||
|
||||
//Returns the sum of the 50-digit numbers
|
||||
mpz_class Problem13::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem14.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
/*
|
||||
The following iterative sequence is defined for the set of positive integers:
|
||||
n → n/2 (n is even)
|
||||
@@ -31,8 +31,7 @@ Which starting number, under one million, produces the longest chain?
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem14.hpp"
|
||||
#include "Problems/Problem14.hpp"
|
||||
|
||||
|
||||
//This is the top number that you will be checking against the series
|
||||
@@ -82,13 +81,9 @@ void Problem14::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The number " << maxNum << " produced a chain of " << maxLength << " steps";
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem14::reset(){
|
||||
Problem::reset();
|
||||
@@ -96,6 +91,16 @@ void Problem14::reset(){
|
||||
maxNum = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem14::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The number " << maxNum << " produced a chain of " << maxLength << " steps";
|
||||
return result.str();
|
||||
}
|
||||
//Returns the length of the requested chain
|
||||
uint64_t Problem14::getLength() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -104,7 +109,6 @@ uint64_t Problem14::getLength() const{
|
||||
}
|
||||
return maxLength;
|
||||
}
|
||||
|
||||
//Returns the starting number of the requested chain
|
||||
uint64_t Problem14::getStartingNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem15.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-29-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many routes from the top left corner to the bottom right corner are there through a 20×20 grid if you can only move right and down?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -26,8 +26,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem15.hpp"
|
||||
#include "Problems/Problem15.hpp"
|
||||
|
||||
|
||||
int Problem15::WIDTH = 20; //The width of the grid
|
||||
@@ -78,19 +77,25 @@ void Problem15::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The number of routes is " << numOfRoutes;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem15::reset(){
|
||||
Problem::reset();
|
||||
numOfRoutes = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem15::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The number of routes is " << numOfRoutes;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the number of routes found
|
||||
uint64_t Problem15::getNumberOfRoutes() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem16.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the digits of the number 2^1000?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -28,8 +28,7 @@
|
||||
#include <sstream>
|
||||
#include <gmpxx.h>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem16.hpp"
|
||||
#include "Problems/Problem16.hpp"
|
||||
|
||||
|
||||
int Problem16::NUM_TO_POWER = 2; //The number that is going to be raised to a power
|
||||
@@ -65,14 +64,9 @@ void Problem16::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << NUM_TO_POWER << '^' << POWER << " = " << num
|
||||
<< "\nThe sum of the elements is " << sumOfElements;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem16::reset(){
|
||||
Problem::reset();
|
||||
@@ -80,6 +74,17 @@ void Problem16::reset(){
|
||||
sumOfElements = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem16::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << NUM_TO_POWER << '^' << POWER << " = " << num
|
||||
<< "\nThe sum of the elements is " << sumOfElements;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the number that was calculated
|
||||
mpz_class Problem16::getNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -88,7 +93,6 @@ mpz_class Problem16::getNumber() const{
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
//Return the sum of the digits of the number
|
||||
int Problem16::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem17.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-05-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -26,8 +26,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem17.hpp"
|
||||
#include "Problems/Problem17.hpp"
|
||||
|
||||
|
||||
//This is the largest number to get the words of
|
||||
@@ -155,11 +154,11 @@ std::string Problem17::wordHelper(int num){
|
||||
case 3: tempString += "three"; break;
|
||||
case 2: tempString += "two"; break;
|
||||
case 1: tempString += "one"; break;
|
||||
//TODO: Throw an exception
|
||||
default: tempString += "ERROR"; break;
|
||||
}
|
||||
return tempString;
|
||||
}
|
||||
|
||||
//This counts the number of letters in the string that is passed in (ignoring numbers and punctuation)
|
||||
uint64_t Problem17::countLetters(std::string str){
|
||||
uint64_t letterCount = 0;
|
||||
@@ -195,19 +194,25 @@ void Problem17::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The number of letters is " << letterCount;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem17::reset(){
|
||||
Problem::reset();
|
||||
letterCount = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem17::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The number of letters is " << letterCount;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the number of letters asked for
|
||||
uint64_t Problem17::getLetterCount() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem18.hpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-01-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the maximum total from top to bottom
|
||||
/*
|
||||
75
|
||||
@@ -45,7 +45,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem18.hpp"
|
||||
#include "Problems/Problem18.hpp"
|
||||
|
||||
|
||||
//Setup the list you are trying to find a path through
|
||||
@@ -139,13 +139,9 @@ void Problem18::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The value of the longest path is " << actualTotal;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem18::reset(){
|
||||
Problem::reset();
|
||||
@@ -154,6 +150,16 @@ void Problem18::reset(){
|
||||
actualTotal = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem18::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The value of the longest path is " << actualTotal;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the pyramid that was traversed as a string
|
||||
std::string Problem18::getPyramid(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -170,7 +176,6 @@ std::string Problem18::getPyramid(){
|
||||
}
|
||||
return results.str();
|
||||
}
|
||||
|
||||
//Returns the trail the algorithm took as a string
|
||||
std::string Problem18::getTrail(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -230,7 +235,6 @@ std::string Problem18::getTrail(){
|
||||
}
|
||||
return results.str();
|
||||
}
|
||||
|
||||
//Returns the total that was asked for
|
||||
int Problem18::getTotal() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem19.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
|
||||
/*
|
||||
You are given the following information, but you may prefer to do some research for yourself.
|
||||
@@ -37,7 +37,7 @@ A leap year occurs on any year evenly divisible by 4, but not on a century unles
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem19.hpp"
|
||||
#include "Problems/Problem19.hpp"
|
||||
|
||||
|
||||
unsigned int Problem19::START_YEAR = 1901; //The start year
|
||||
@@ -119,7 +119,6 @@ Problem19::DAYS Problem19::getDay(unsigned int month, unsigned int day, unsigned
|
||||
default: return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
//Returns true if the year passed to it is a leap year
|
||||
bool Problem19::isLeapYear(unsigned int year){
|
||||
if(year < 1){
|
||||
@@ -171,19 +170,25 @@ void Problem19::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "There are " << totalSundays << " Sundays that landed on the first of the months from " << START_YEAR << " to " << END_YEAR;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem19::reset(){
|
||||
Problem::reset();
|
||||
totalSundays = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem19::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "There are " << totalSundays << " Sundays that landed on the first of the months from " << START_YEAR << " to " << END_YEAR;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the total sundays that were asked for
|
||||
uint64_t Problem19::getTotalSundays() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem2.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//The sum of the even Fibonacci numbers less than 4,000,000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem2.hpp"
|
||||
#include "Problems/Problem2.hpp"
|
||||
|
||||
|
||||
//Holds the largest number that we are looking for
|
||||
@@ -61,19 +60,25 @@ void Problem2::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The sum of the even Fibonacci numbers less than 4,000,000 is " << fullSum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem2::reset(){
|
||||
Problem::reset();
|
||||
fullSum = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem2::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of the even Fibonacci numbers less than 4,000,000 is " << fullSum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the requested sum
|
||||
uint64_t Problem2::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem20.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-07-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the digits of 100!?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -30,7 +30,7 @@
|
||||
#include <sstream>
|
||||
#include "gmpxx.h"
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem20.hpp"
|
||||
#include "Problems/Problem20.hpp"
|
||||
|
||||
|
||||
//Constructor
|
||||
@@ -64,14 +64,9 @@ void Problem20::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "100! = " << num.get_str()
|
||||
<< "\nThe sum of the digits is: " << sum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem20::reset(){
|
||||
Problem::reset();
|
||||
@@ -79,6 +74,17 @@ void Problem20::reset(){
|
||||
num = 1;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem20::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "100! = " << num.get_str()
|
||||
<< "\nThe sum of the digits is: " << sum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the number 100!
|
||||
mpz_class Problem20::getNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -87,7 +93,6 @@ mpz_class Problem20::getNumber() const{
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
//Returns the number 100! in a string
|
||||
std::string Problem20::getNumberString() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -96,7 +101,6 @@ std::string Problem20::getNumberString() const{
|
||||
}
|
||||
return num.get_str();
|
||||
}
|
||||
|
||||
//Returns the sum of the digits of 100!
|
||||
uint64_t Problem20::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem21.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-08-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Evaluate the sum of all the amicable numbers under 10000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -28,7 +28,7 @@
|
||||
#include <sstream>
|
||||
#include "Algorithms.hpp"
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem21.hpp"
|
||||
#include "Problems/Problem21.hpp"
|
||||
|
||||
|
||||
//The top number that will be evaluated
|
||||
@@ -87,17 +87,9 @@ void Problem21::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "All amicable numbers less than 10000 are\n";
|
||||
for(unsigned int cnt = 0;cnt < amicable.size();++cnt){
|
||||
result << amicable.at(cnt) << '\n';
|
||||
}
|
||||
result << "The sum of all of these amicable numbers is " << mee::getSum(amicable);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem21::reset(){
|
||||
Problem::reset();
|
||||
@@ -106,6 +98,20 @@ void Problem21::reset(){
|
||||
reserveVectors();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem21::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "All amicable numbers less than 10000 are\n";
|
||||
for(unsigned int cnt = 0;cnt < amicable.size();++cnt){
|
||||
result << amicable.at(cnt) << '\n';
|
||||
}
|
||||
result << "The sum of all of these amicable numbers is " << mee::getSum(amicable);
|
||||
return result.str();
|
||||
}
|
||||
//Returns a vector with all of the amicable numbers calculated
|
||||
std::vector<uint64_t> Problem21::getAmicable() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -114,7 +120,6 @@ std::vector<uint64_t> Problem21::getAmicable() const{
|
||||
}
|
||||
return amicable;
|
||||
}
|
||||
|
||||
//Returns the sum of all of the amicable numbers
|
||||
uint64_t Problem21::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem22.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-09-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the total of all the name scores in the file?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem22.hpp"
|
||||
#include "Problems/Problem22.hpp"
|
||||
|
||||
|
||||
//Holds the names that will be scored
|
||||
@@ -445,13 +445,9 @@ void Problem22::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The answer to the question is " << mee::getSum(prod);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem22::reset(){
|
||||
Problem::reset();
|
||||
@@ -460,6 +456,17 @@ void Problem22::reset(){
|
||||
reserveVectors();
|
||||
}
|
||||
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem22::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The answer to the question is " << mee::getSum(prod);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the vector of the names being scored
|
||||
std::vector<std::string> Problem22::getNames() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -468,7 +475,6 @@ std::vector<std::string> Problem22::getNames() const{
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
//Returns the sum of the names' scores
|
||||
uint64_t Problem22::getNameScoreSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem23.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-09-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem23.hpp"
|
||||
#include "Problems/Problem23.hpp"
|
||||
|
||||
|
||||
//The largest possible number that can not be written as the sum of two abundant numbers
|
||||
@@ -54,7 +54,6 @@ bool Problem23::isSum(const std::vector<int>& abund, int num){
|
||||
//If you have run through the entire list and did not find a sum then it is false
|
||||
return false;
|
||||
}
|
||||
|
||||
//Reserve the size of the vector to speed up insertion
|
||||
void Problem23::reserveVectors(){
|
||||
//This makes sure the vector is the correct size
|
||||
@@ -104,13 +103,9 @@ void Problem23::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The answer is " << sum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem23::reset(){
|
||||
Problem::reset();
|
||||
@@ -119,6 +114,16 @@ void Problem23::reset(){
|
||||
reserveVectors();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem23::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The answer is " << sum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the sum of the numbers asked for
|
||||
uint64_t Problem23::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem24.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-11-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,7 +27,7 @@
|
||||
#include <sstream>
|
||||
#include "Algorithms.hpp"
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem24.hpp"
|
||||
#include "Problems/Problem24.hpp"
|
||||
|
||||
|
||||
//The number of the permutation that you need
|
||||
@@ -55,19 +55,25 @@ void Problem24::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The 1 millionth permutation is " << permutations.at(NEEDED_PERM - 1);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem24::reset(){
|
||||
Problem::reset();
|
||||
permutations.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem24::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The 1 millionth permutation is " << permutations.at(NEEDED_PERM - 1);
|
||||
return result.str();
|
||||
}
|
||||
//Returns a vector with all of the permutations
|
||||
std::vector<std::string> Problem24::getPermutationsList() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -76,7 +82,6 @@ std::vector<std::string> Problem24::getPermutationsList() const{
|
||||
}
|
||||
return permutations;
|
||||
}
|
||||
|
||||
//Returns the specific permutations you are looking for
|
||||
std::string Problem24::getPermutation() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem25.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-13-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the index of the first term in the Fibonacci sequence to contain 1000 digits?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -30,7 +30,7 @@
|
||||
#include "gmpxx.h"
|
||||
#include "Algorithms.hpp"
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem25.hpp"
|
||||
#include "Problems/Problem25.hpp"
|
||||
|
||||
|
||||
//The number of digits to calculate up to
|
||||
@@ -61,14 +61,9 @@ void Problem25::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The first Fibonacci number with " << NUM_DIGITS << " digits is " << number
|
||||
<< "\nIts index is " << index;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem25::reset(){
|
||||
Problem::reset();
|
||||
@@ -76,6 +71,17 @@ void Problem25::reset(){
|
||||
index = 2;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem25::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The first Fibonacci number with " << NUM_DIGITS << " digits is " << number
|
||||
<< "\nIts index is " << index;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the Fibonacci number asked for
|
||||
mpz_class Problem25::getNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -84,7 +90,6 @@ mpz_class Problem25::getNumber() const{
|
||||
}
|
||||
return number;
|
||||
}
|
||||
|
||||
//Returns the Fibonacci number asked for as a string
|
||||
std::string Problem25::getNumberString() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -93,7 +98,6 @@ std::string Problem25::getNumberString() const{
|
||||
}
|
||||
return number.get_str();
|
||||
}
|
||||
|
||||
//Returns the index of the requested Fibonacci number
|
||||
mpz_class Problem25::getIndex() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -102,7 +106,6 @@ mpz_class Problem25::getIndex() const{
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
//Returns the index of the requested Fibonacci number as a string
|
||||
std::string Problem25::getIndexString() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -111,7 +114,6 @@ std::string Problem25::getIndexString() const{
|
||||
}
|
||||
return index.get_str();
|
||||
}
|
||||
|
||||
//Returns the index of the requested Fibonacci number as a uint64_t
|
||||
uint64_t Problem25::getIndexInt() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem26.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-28-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem26.hpp"
|
||||
#include "Problems/Problem26.hpp"
|
||||
|
||||
|
||||
//Holds the highest denominator we will check
|
||||
@@ -89,14 +89,9 @@ void Problem26::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The longest cycle is " << longestCycle << " digits long\n"
|
||||
<< "It is started with the number " << longestNumber;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem26::reset(){
|
||||
Problem::reset();
|
||||
@@ -104,6 +99,17 @@ void Problem26::reset(){
|
||||
longestNumber = 1;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem26::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The longest cycle is " << longestCycle << " digits long"
|
||||
<< "\nIt is started with the number " << longestNumber;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the length of the longest cycle
|
||||
unsigned int Problem26::getLongestCycle() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -112,7 +118,6 @@ unsigned int Problem26::getLongestCycle() const{
|
||||
}
|
||||
return longestCycle;
|
||||
}
|
||||
|
||||
//Returns the denominator that starts the longest cycle
|
||||
unsigned int Problem26::getLongestNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem27.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-14-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the product of the coefficients, |a| < 1000 and |b| <= 1000, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n=0.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <sstream>
|
||||
#include <cinttypes>
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem27.hpp"
|
||||
#include "Problems/Problem27.hpp"
|
||||
|
||||
|
||||
//Constructor
|
||||
@@ -70,15 +70,9 @@ void Problem27::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The greatest number of primes found is " << topN
|
||||
<< "\nIt was found with A = " << topA << ", B = " << topB
|
||||
<< "\nThe product of A and B is " << topA * topB;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem27::reset(){
|
||||
Problem::reset();
|
||||
@@ -86,6 +80,18 @@ void Problem27::reset(){
|
||||
primes.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem27::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The greatest number of primes found is " << topN
|
||||
<< "\nIt was found with A = " << topA << ", B = " << topB
|
||||
<< "\nThe product of A and B is " << topA * topB;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the top A that was generated
|
||||
int64_t Problem27::getTopA() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -94,7 +100,6 @@ int64_t Problem27::getTopA() const{
|
||||
}
|
||||
return topA;
|
||||
}
|
||||
|
||||
//Returns the top B that was generated
|
||||
int64_t Problem27::getTopB() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -103,7 +108,6 @@ int64_t Problem27::getTopB() const{
|
||||
}
|
||||
return topB;
|
||||
}
|
||||
|
||||
//Returns the top N that was generated
|
||||
int64_t Problem27::getTopN() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem28.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-21-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed by starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <cinttypes>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include "../Headers/Problem28.hpp"
|
||||
#include "Problems/Problem28.hpp"
|
||||
|
||||
|
||||
//This sets up the grid to hold the correct number of variables
|
||||
@@ -39,7 +39,6 @@ void Problem28::setupGrid(){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Puts all of the numbers in the grid up the grid
|
||||
void Problem28::createGrid(){
|
||||
bool finalLocation = false; //A flag to indicate if the final location to be filled has been reached
|
||||
@@ -84,7 +83,6 @@ void Problem28::createGrid(){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Finds the sum of the diagonals in the grid
|
||||
void Problem28::findSum(){
|
||||
//Start at the top corners and work your way down moving toward the opposite side
|
||||
@@ -132,13 +130,9 @@ void Problem28::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The sum of the diagonals in the given grid is " << sumOfDiagonals;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem28::reset(){
|
||||
Problem::reset();
|
||||
@@ -147,6 +141,16 @@ void Problem28::reset(){
|
||||
setupGrid();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem28::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of the diagonals in the given grid is " << sumOfDiagonals;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the grid
|
||||
std::vector<std::vector<int>> Problem28::getGrid() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -155,7 +159,6 @@ std::vector<std::vector<int>> Problem28::getGrid() const{
|
||||
}
|
||||
return grid;
|
||||
}
|
||||
|
||||
//Returns the sum of the diagonals
|
||||
uint64_t Problem28::getSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem29.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-06-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//How many distinct terms are in the sequence generated by a^b for 2 <= a <= 100 and 2 <= b <= 100?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
//This file contains a header from the gmp library. The library is used for large integers.
|
||||
@@ -30,7 +30,7 @@
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <gmpxx.h>
|
||||
#include "../Headers/Problem29.hpp"
|
||||
#include "Problems/Problem29.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
|
||||
|
||||
@@ -73,19 +73,25 @@ void Problem29::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The number of unique values generated by a^b for " << BOTTOM_A << " <= a <= " << TOP_A << " and " << BOTTOM_B << " <= b <= " << TOP_B << " is " << unique.size();
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem29::reset(){
|
||||
Problem::reset();
|
||||
unique.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem29::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The number of unique values generated by a^b for " << BOTTOM_A << " <= a <= " << TOP_A << " and " << BOTTOM_B << " <= b <= " << TOP_B << " is " << unique.size();
|
||||
return result.str();
|
||||
}
|
||||
//Returns the lowest possible value for a
|
||||
unsigned int Problem29::getBottomA() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -94,7 +100,6 @@ unsigned int Problem29::getBottomA() const{
|
||||
}
|
||||
return BOTTOM_A;
|
||||
}
|
||||
|
||||
//Returns the highest possible value for a
|
||||
unsigned int Problem29::getTopA() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -103,7 +108,6 @@ unsigned int Problem29::getTopA() const{
|
||||
}
|
||||
return TOP_A;
|
||||
}
|
||||
|
||||
//Returns the lowest possible value for b
|
||||
unsigned int Problem29::getBottomB() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -112,7 +116,6 @@ unsigned int Problem29::getBottomB() const{
|
||||
}
|
||||
return BOTTOM_B;
|
||||
}
|
||||
|
||||
//Returns the highest possible value for b
|
||||
unsigned int Problem29::getTopB() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -121,7 +124,6 @@ unsigned int Problem29::getTopB() const{
|
||||
}
|
||||
return TOP_B;
|
||||
}
|
||||
|
||||
//Returns a vector of all the unique values for a^b
|
||||
std::vector<mpz_class> Problem29::getUnique() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem3.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//The largest prime factor of 600851475143
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -28,8 +28,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem3.hpp"
|
||||
#include "Problems/Problem3.hpp"
|
||||
|
||||
|
||||
//The number of which you are trying to find the factors
|
||||
@@ -54,19 +53,25 @@ void Problem3::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The largest factor of the number " << GOAL_NUMBER << " is " << factors[factors.size() - 1];
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem3::reset(){
|
||||
Problem::reset();
|
||||
factors.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem3::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The largest factor of the number " << GOAL_NUMBER << " is " << factors[factors.size() - 1];
|
||||
return result.str();
|
||||
}
|
||||
//Returns the list of factors of the number
|
||||
std::vector<uint64_t> Problem3::getFactors() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -75,7 +80,6 @@ std::vector<uint64_t> Problem3::getFactors() const{
|
||||
}
|
||||
return factors;
|
||||
}
|
||||
|
||||
//Returns the largest factor of the number
|
||||
uint64_t Problem3::getLargestFactor() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -85,7 +89,6 @@ uint64_t Problem3::getLargestFactor() const{
|
||||
|
||||
return *factors.end();
|
||||
}
|
||||
|
||||
//Returns the number
|
||||
uint64_t Problem3::getGoalNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem30.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 10-27-19
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,7 +27,7 @@
|
||||
#include <cinttypes>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include "../Headers/Problem30.hpp"
|
||||
#include "Problems/Problem30.hpp"
|
||||
|
||||
|
||||
//This is the largest number that will be checked
|
||||
@@ -85,17 +85,23 @@ void Problem30::solve(){
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
|
||||
//Save the results
|
||||
result << "The sum of all the numbers that can be written as the sum of the fifth powers of their digits is " << getSumOfList();
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem30::reset(){
|
||||
Problem::reset();
|
||||
sumOfFifthNumbers.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem30::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The sum of all the numbers that can be written as the sum of the fifth powers of their digits is " << getSumOfList();
|
||||
return result.str();
|
||||
}
|
||||
//This returns the top number to be checked
|
||||
uint64_t Problem30::getTopNum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -105,7 +111,6 @@ uint64_t Problem30::getTopNum() const{
|
||||
|
||||
return TOP_NUM;
|
||||
}
|
||||
|
||||
//This returns a copy of the vector holding all the numbers that are the sum of the fifth power of their digits
|
||||
std::vector<uint64_t> Problem30::getListOfSumOfFifths() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -115,7 +120,6 @@ std::vector<uint64_t> Problem30::getListOfSumOfFifths() const{
|
||||
|
||||
return sumOfFifthNumbers;
|
||||
}
|
||||
|
||||
//This returns the sum of all entries in sumOfFifthNumbers
|
||||
uint64_t Problem30::getSumOfList() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem31.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 06-19-20
|
||||
//Modified: 07-11-20
|
||||
//Modified: 08-28-20
|
||||
//How many different ways can £2 be made using any number of coins?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include "../Headers/Problem31.hpp"
|
||||
#include "Problems/Problem31.hpp"
|
||||
|
||||
|
||||
//The value of coins we want
|
||||
@@ -67,19 +67,25 @@ void Problem31::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "There are " << permutations << " ways to make 2 pounds with the given denominations of coins";
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem31::reset(){
|
||||
Problem::reset();
|
||||
permutations = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem31::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "There are " << permutations << " ways to make 2 pounds with the given denominations of coins";
|
||||
return result.str();
|
||||
}
|
||||
//Returns the number of correct permutations of the coins
|
||||
int Problem31::getPermutations() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem32.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 07-27-20
|
||||
//Modified: 07-27-20
|
||||
//Modified: 08-28-20
|
||||
//Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,7 +27,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem32.hpp"
|
||||
#include "Problems/Problem32.hpp"
|
||||
#include <iostream>
|
||||
|
||||
int Problem32::TOP_MULTIPLICAND = 99; //The largest multiplicand to check
|
||||
@@ -94,9 +94,6 @@ void Problem32::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "There are " << listOfProducts.size() << " unique 1-9 pandigitals\nThe sum of the products of these pandigitals is " << sumOfPandigitals;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
@@ -106,7 +103,17 @@ void Problem32::reset(){
|
||||
listOfProducts.clear();
|
||||
sumOfPandigitals = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem32::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "There are " << listOfProducts.size() << " unique 1-9 pandigitals\nThe sum of the products of these pandigitals is " << sumOfPandigitals;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the sum of the pandigitals
|
||||
int64_t Problem32::getSumOfPandigitals(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem4.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the largest palindrome made from the product of two 3-digit numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem4.hpp"
|
||||
#include "Problems/Problem4.hpp"
|
||||
|
||||
|
||||
//The first number to check
|
||||
@@ -75,19 +74,25 @@ void Problem4::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The largest palindrome is " << *(palindromes.end() - 1);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Resets the problem so it can be run again
|
||||
void Problem4::reset(){
|
||||
Problem::reset();
|
||||
palindromes.clear();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem4::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The largest palindrome is " << *(palindromes.end() - 1);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the list of all palindromes
|
||||
std::vector<uint64_t> Problem4::getPalindromes() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -96,7 +101,6 @@ std::vector<uint64_t> Problem4::getPalindromes() const{
|
||||
}
|
||||
return palindromes;
|
||||
}
|
||||
|
||||
//Returns the largest palindrome
|
||||
uint64_t Problem4::getLargestPalindrome() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem5.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem5.hpp"
|
||||
#include "Problems/Problem5.hpp"
|
||||
|
||||
|
||||
//Constructor
|
||||
@@ -72,19 +71,25 @@ void Problem5::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The smallest positive number evenly divisible by all numbers 1-20 is " << smallestNum;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem5::reset(){
|
||||
Problem::reset();
|
||||
smallestNum = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem5::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The smallest positive number evenly divisible by all numbers 1-20 is " << smallestNum;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the requested number
|
||||
int Problem5::getNumber() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem6.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -27,8 +27,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem6.hpp"
|
||||
#include "Problems/Problem6.hpp"
|
||||
|
||||
|
||||
int Problem6::START_NUM = 1; //The first number to check
|
||||
@@ -58,19 +57,25 @@ void Problem6::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The difference between the sum of the squares and the square of the sum of all numbers from 1-100 is " << abs(sumOfSquares - squareOfSum);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem6::reset(){
|
||||
Problem::reset();
|
||||
sumOfSquares = squareOfSum = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem6::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The difference between the sum of the squares and the square of the sum of all numbers from 1-100 is " << abs(sumOfSquares - squareOfSum);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the sum of all the squares
|
||||
uint64_t Problem6::getSumOfSquares() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -79,7 +84,6 @@ uint64_t Problem6::getSumOfSquares() const{
|
||||
}
|
||||
return sumOfSquares;
|
||||
}
|
||||
|
||||
//Returns the square of all of the sums
|
||||
uint64_t Problem6::getSquareOfSum() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -88,7 +92,6 @@ uint64_t Problem6::getSquareOfSum() const{
|
||||
}
|
||||
return squareOfSum;
|
||||
}
|
||||
|
||||
//Returns the requested difference
|
||||
uint64_t Problem6::getDifference() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem67.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 11-02-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//The way to do this is using a breadth first search
|
||||
/*
|
||||
Find the maximum total from top to bottom
|
||||
@@ -126,7 +126,7 @@ Find the maximum total from top to bottom
|
||||
|
||||
|
||||
#include <vector>
|
||||
#include "../Headers/Problem67.hpp"
|
||||
#include "Problems/Problem67.hpp"
|
||||
|
||||
|
||||
//This is the list you are trying to find a path through
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem7.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//What is the 10001th prime number?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -28,8 +28,7 @@
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem7.hpp"
|
||||
#include "Problems/Problem7.hpp"
|
||||
|
||||
|
||||
//The index of the prime number to find
|
||||
@@ -54,18 +53,24 @@ void Problem7::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The " << NUMBER_OF_PRIMES << "th prime number is " << primes.at(primes.size() - 1);
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem7::reset(){
|
||||
Problem::reset();
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem7::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The " << NUMBER_OF_PRIMES << "th prime number is " << primes.at(primes.size() - 1);
|
||||
return result.str();
|
||||
}
|
||||
//Returns the requested prime number
|
||||
uint64_t Problem7::getPrime() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem8.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
|
||||
/*
|
||||
73167176531330624919225119674426574742355349194934
|
||||
@@ -49,8 +49,7 @@
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem8.hpp"
|
||||
#include "Problems/Problem8.hpp"
|
||||
|
||||
|
||||
//The number that we are working with
|
||||
@@ -84,14 +83,9 @@ void Problem8::solve(){
|
||||
//Stop the timer
|
||||
timer.stop();
|
||||
|
||||
//Save the results
|
||||
result << "The greatest product is " << maxProduct
|
||||
<< "\nThe numbers are " << maxNums;
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run
|
||||
void Problem8::reset(){
|
||||
Problem::reset();
|
||||
@@ -99,6 +93,17 @@ void Problem8::reset(){
|
||||
maxProduct = 0;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem8::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The greatest product is " << maxProduct
|
||||
<< "\nThe numbers are " << maxNums;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the string of numbers that produces the largest product
|
||||
std::string Problem8::getLargestNums() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -107,7 +112,6 @@ std::string Problem8::getLargestNums() const{
|
||||
}
|
||||
return maxNums;
|
||||
}
|
||||
|
||||
//Returns the requested product
|
||||
uint64_t Problem8::getLargestProduct() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEuler/ProjectEulerCPP/Source/Problem9.cpp
|
||||
//Matthew Ellison
|
||||
// Created: 09-28-18
|
||||
//Modified: 07-09-20
|
||||
//Modified: 08-28-20
|
||||
//There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product of abc.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/myClasses
|
||||
/*
|
||||
@@ -26,8 +26,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include "Stopwatch.hpp"
|
||||
#include "../Headers/Problem.hpp"
|
||||
#include "../Headers/Problem9.hpp"
|
||||
#include "Problems/Problem9.hpp"
|
||||
|
||||
|
||||
//Constructor
|
||||
@@ -68,17 +67,15 @@ void Problem9::solve(){
|
||||
|
||||
//Save the results
|
||||
if(found){
|
||||
result << "The Pythagorean triplet is " << a << ' ' << b << ' ' << (int)c
|
||||
<< "\nThe numbers' product is " << a * b * (int)c;
|
||||
solved = true;
|
||||
}
|
||||
else{
|
||||
result << "The number was not found!";
|
||||
//TODO: Throw an exception
|
||||
}
|
||||
|
||||
//Throw a flag to show the problem is solved
|
||||
solved = true;
|
||||
|
||||
}
|
||||
|
||||
//Reset the problem so it can be run again
|
||||
void Problem9::reset(){
|
||||
Problem::reset();
|
||||
@@ -88,6 +85,17 @@ void Problem9::reset(){
|
||||
found = false;
|
||||
}
|
||||
|
||||
//Gets
|
||||
//Return a string with the solution to the problem
|
||||
std::string Problem9::getResult(){
|
||||
if(!solved){
|
||||
throw Unsolved();
|
||||
}
|
||||
std::stringstream result;
|
||||
result << "The Pythagorean triplet is " << a << ' ' << b << ' ' << (int)c
|
||||
<< "\nThe numbers' product is " << a * b * (int)c;
|
||||
return result.str();
|
||||
}
|
||||
//Returns the length of the first side
|
||||
int Problem9::getSideA() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -96,7 +104,6 @@ int Problem9::getSideA() const{
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
//Returns the length of the second side
|
||||
int Problem9::getSideB() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -105,7 +112,6 @@ int Problem9::getSideB() const{
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
//Returns the length of the hyp
|
||||
int Problem9::getSideC() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -114,7 +120,6 @@ int Problem9::getSideC() const{
|
||||
}
|
||||
return (int)c;
|
||||
}
|
||||
|
||||
//Returns the product of the 3 sides
|
||||
int Problem9::getProduct() const{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <vector>
|
||||
#include "benchmark.hpp"
|
||||
#include "Algorithms.hpp"
|
||||
#include "Headers/Problem.hpp"
|
||||
#include "Problem.hpp"
|
||||
#include "ProblemSelection.hpp"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user