commit 1200e4df6af5c92ebadb90d2cab4278a2d357725
parent 5efc6904b6eab1c3a82ce96fbb24a62f8082df8d
Author: mpizzzle <m@michaelpercival.xyz>
Date: Mon, 21 Sep 2020 18:06:01 +0100
fixing compilation errors and warnings
Diffstat:
23 files changed, 104 insertions(+), 107 deletions(-)
diff --git a/EulerUtility.cpp b/EulerUtility.cpp
@@ -461,7 +461,7 @@ llui EulerUtility::phi(int n, std::vector<int> &primes, std::vector<int> &primes
return n - 1;
// Even number?
- if (n & 1 == 0)
+ if ((n & 1) == 0)
{
int m = n >> 1;
return !(m & 1) ? EulerUtility::phi(m, primes, primesIndexed) << 1 : EulerUtility::phi(m, primes, primesIndexed);
@@ -478,4 +478,6 @@ llui EulerUtility::phi(int n, std::vector<int> &primes, std::vector<int> &primes
int d = EulerUtility::gcd(m, o);
return (d == 1) ? EulerUtility::phi(m, primes, primesIndexed) * EulerUtility::phi(o, primes, primesIndexed) : EulerUtility::phi(m, primes, primesIndexed) * EulerUtility::phi(o, primes, primesIndexed) * d / EulerUtility::phi(d, primes, primesIndexed);
}
+
+ return 0;
}
diff --git a/EulerUtility.h b/EulerUtility.h
@@ -1,3 +1,4 @@
+#include <cmath>
#include <string>
#include <vector>
diff --git a/Euler_10.cpp b/Euler_10.cpp
@@ -2,8 +2,6 @@
llui Euler::SumOfPrimesUnder2m()
{
- int noOfPrimes = 0;
-
bool is_prime;
llui count = 2; //includes 2 & 3
@@ -21,4 +19,4 @@ llui Euler::SumOfPrimesUnder2m()
}
return count;
-}-
No newline at end of file
+}
diff --git a/Euler_17.cpp b/Euler_17.cpp
@@ -10,7 +10,7 @@ int tenz(int ten, int j, int k)
return (j == 1) ? ((k == 0) ? ten : 0) : ten;
}
-int and(int count)
+int _and(int count)
{
return ((count >= 100) && (count % 100 != 0)) ? std::string("and").length() : 0;
}
@@ -31,7 +31,7 @@ int Euler::LetterCounter()
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
for (int k = 0; k < 10; ++k)
- sum += x_hundred(digits, i) + and(i * 100 + j * 10 + k) + tenz(tens[j].length(), j, k) + digit(digits, teens, j, k);
+ sum += x_hundred(digits, i) + _and(i * 100 + j * 10 + k) + tenz(tens[j].length(), j, k) + digit(digits, teens, j, k);
return sum;
-}-
No newline at end of file
+}
diff --git a/Euler_35.cpp b/Euler_35.cpp
@@ -1,3 +1,5 @@
+#include <algorithm>
+
#include "Euler.h"
int Euler::NoOfCircularPrimes()
@@ -39,4 +41,4 @@ int Euler::NoOfCircularPrimes()
}
return total;
-}-
No newline at end of file
+}
diff --git a/Euler_37.cpp b/Euler_37.cpp
@@ -7,7 +7,8 @@ bool isTruncPrime(std::string &p, std::vector<int> &primes, bool left)
if (p.size() == 1)
return isPrime;
- return (isPrime) ? isTruncPrime(p.substr(left, p.size() - 1), primes, left) : false;
+ std::string p_substr = p.substr(left, p.size() - 1);
+ return (isPrime) ? isTruncPrime(p_substr, primes, left) : false;
}
llui Euler::TruncatablePrimes()
@@ -24,4 +25,4 @@ llui Euler::TruncatablePrimes()
}
return sum;
-}-
No newline at end of file
+}
diff --git a/Euler_44.cpp b/Euler_44.cpp
@@ -14,10 +14,10 @@ int Euler::MinimizedPentagonalDifference()
{
pentaNos.push_back(getPentagonal(pentaNos.size() + 1));
- for (int j = 0; j < pentaNos.size() - 1; ++j)
+ for (uint64_t j = 0; j < pentaNos.size() - 1; ++j)
if (EulerUtility::isPentagonal(pentaNos[pentaNos.size() - 1] + pentaNos[j]) && EulerUtility::isPentagonal(pentaNos[pentaNos.size() - 1] - pentaNos[j]))
return pentaNos[pentaNos.size() - 1] - pentaNos[j];
}
return 0;
-}-
No newline at end of file
+}
diff --git a/Euler_46.cpp b/Euler_46.cpp
@@ -4,13 +4,13 @@ llui Euler::GoldbachsOtherConjecture()
{
std::vector<int> primes = EulerUtility::getPrimesUnderCeilingIndexed(1000000);
- for (int i = 33; i < primes.size(); ++i)
+ for (uint64_t i = 33; i < primes.size(); ++i)
{
if ((i & 1) && primes[i] == -1)
{
bool conjecture_holds = false;
- for (int j = 0; j < i; ++j)
+ for (uint64_t j = 0; j < i; ++j)
{
if (primes[j] != -1)
{
@@ -28,4 +28,4 @@ llui Euler::GoldbachsOtherConjecture()
}
return 0;
-}-
No newline at end of file
+}
diff --git a/Euler_49.cpp b/Euler_49.cpp
@@ -14,7 +14,7 @@ std::string Euler::PrimePermutations()
bool isUniquePermutation = true;
std::string s = std::to_string(p);
- for (int i = 0; i < primePermutations.size(); ++i)
+ for (uint64_t i = 0; i < primePermutations.size(); ++i)
{
if (std::is_permutation(primePermutations[i][0].begin(), primePermutations[i][0].end(), s.begin()))
{
@@ -32,11 +32,11 @@ std::string Euler::PrimePermutations()
for (std::vector<std::string> pp : primePermutations)
if (pp.size() > 2)
- for (int i = 0; i < pp.size() - 2; ++i)
- for (int j = i + 1; j < pp.size() - 1; ++j)
- for (int k = j + 1; k < pp.size(); ++k)
+ for (uint64_t i = 0; i < pp.size() - 2; ++i)
+ for (uint64_t j = i + 1; j < pp.size() - 1; ++j)
+ for (uint64_t k = j + 1; k < pp.size(); ++k)
if ((atoi(pp[j].c_str()) * 2) - atoi(pp[i].c_str()) == atoi(pp[k].c_str()))
return pp[i] + pp[j] + pp[k];
return nullptr;
-}-
No newline at end of file
+}
diff --git a/Euler_5.cpp b/Euler_5.cpp
@@ -19,7 +19,7 @@ void addNewPrimeFactors(int nextDivisor, std::vector<int> &p_factors, std::vecto
++i;
}
- for (int j = 0; j < myPrimeFactors.size(); ++j)
+ for (uint64_t j = 0; j < myPrimeFactors.size(); ++j)
if (p_factors[j] < myPrimeFactors[j])
p_factors[j] = myPrimeFactors[j];
}
@@ -34,9 +34,9 @@ int Euler::DivisibleBy1To20()
for (int i = 2; i <= ceiling; ++i)
addNewPrimeFactors(i, noOfPrimeFactors, primes);
- for (int i = 0; i < noOfPrimeFactors.size(); ++i)
+ for (uint64_t i = 0; i < noOfPrimeFactors.size(); ++i)
for (int j = 0; j < noOfPrimeFactors[i]; ++j)
primeFactors.push_back(primes[i]);
return std::accumulate(primeFactors.begin(), primeFactors.end(), 1, EulerUtility::multiply);
-}-
No newline at end of file
+}
diff --git a/Euler_51.cpp b/Euler_51.cpp
@@ -20,7 +20,7 @@ int Euler::PrimeDigitReplacements()
int repeatedDigits[3] = {0, 0, 0};
- for (int i = 0; i < digits.size() - 1; ++i)
+ for (uint64_t i = 0; i < digits.size() - 1; ++i)
if (digits[i] <= 2)
++repeatedDigits[digits[i]];
@@ -41,7 +41,7 @@ int Euler::PrimeDigitReplacements()
std::vector<int> indices;
int sizeOfFamily = 1;
- for (int i = 0; i < digits.size() - 1; ++i)
+ for (uint64_t i = 0; i < digits.size() - 1; ++i)
if (digits[i] == p.digit)
indices.push_back(i);
@@ -62,4 +62,4 @@ int Euler::PrimeDigitReplacements()
}
return 0;
-}-
No newline at end of file
+}
diff --git a/Euler_53.cpp b/Euler_53.cpp
@@ -1,13 +0,0 @@
-#include "Euler.h"
-
-int Euler::CombinatoricSelections()
-{
- int total = 0;
-
- for (int i = 1; i <= 100; ++i)
- for (int j = 1; j <= i; ++j)
- if (EulerUtility::choose(i, j) > 1000000)
- ++total;
-
- return total;
-}-
No newline at end of file
diff --git a/Euler_54.cpp b/Euler_54.cpp
@@ -1,4 +1,5 @@
#include <algorithm>
+#include <cstdint>
#include <fstream>
#include <functional>
#include <unordered_set>
@@ -22,7 +23,7 @@ bool isFlush(std::vector<std::string>& hand)
{
char c = hand[0][1];
- for (int i = 1; i < hand.size(); ++i)
+ for (uint64_t i = 1; i < hand.size(); ++i)
if (hand[i][1] != c)
return false;
@@ -31,7 +32,7 @@ bool isFlush(std::vector<std::string>& hand)
bool isStraight(std::vector<int> indices)
{
- for (int i = 1; i < indices.size(); ++i)
+ for (uint64_t i = 1; i < indices.size(); ++i)
if (indices[i] != indices[i - 1] - 1)
return false;
@@ -42,7 +43,7 @@ std::vector<int> getCardValues(std::vector<std::string>& hand)
{
std::vector<int> indices;
- for (int i = 0; i < hand.size(); ++i)
+ for (uint64_t i = 0; i < hand.size(); ++i) {
for (int j = 0; j < 13; ++j)
{
char c = hand[i][0];
@@ -52,10 +53,11 @@ std::vector<int> getCardValues(std::vector<std::string>& hand)
break;
}
}
+ }
- std::sort(indices.begin(), indices.end(), std::greater<int>());
+ std::sort(indices.begin(), indices.end(), std::greater<int>());
- return indices;
+ return indices;
}
int determineNoOfRepeats(std::unordered_set<int>& us, std::vector<int>& cardValues, int t, int def, int high)
@@ -64,7 +66,7 @@ int determineNoOfRepeats(std::unordered_set<int>& us, std::vector<int>& cardValu
{
int total = 0;
- for (int k = 0; k < cardValues.size(); ++k)
+ for (uint64_t k = 0; k < cardValues.size(); ++k)
if (j == cardValues[k])
++total;
@@ -81,7 +83,7 @@ int determineRepeat(std::unordered_set<int>& us, std::vector<int>& cardValues, i
{
int total = 0;
- for (int k = 0; k < cardValues.size(); ++k)
+ for (uint64_t k = 0; k < cardValues.size(); ++k)
if (j == cardValues[k])
++total;
@@ -110,9 +112,10 @@ void determinePriorityOrder(hand& h, std::unordered_set<int>& us)
case 1:
rep1 = determineRepeat(us, h.cardValues, 2, false);
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i) {
if (h.cardValues[i] == rep1)
std::swap(h.cardValues[no++], h.cardValues[i]);
+ }
std::sort(h.cardValues.begin() + 2, h.cardValues.end(), std::greater<int>());
break;
@@ -123,28 +126,29 @@ void determinePriorityOrder(hand& h, std::unordered_set<int>& us)
if (rep2 > rep1)
std::swap(rep1, rep2);
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i)
{
if (h.cardValues[i] == rep1)
std::swap(h.cardValues[no++], h.cardValues[i]);
}
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i)
if (h.cardValues[i] == rep2)
std::swap(h.cardValues[no++], h.cardValues[i]);
break;
case 3:
rep1 = determineRepeat(us, h.cardValues, 3, false);
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i) {
if (h.cardValues[i] == rep1)
std::swap(h.cardValues[no++], h.cardValues[i]);
+ }
std::sort(h.cardValues.begin() + 3, h.cardValues.end(), std::greater<int>());
break;
case 6:
rep1 = determineRepeat(us, h.cardValues, 3, false);
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i)
if (h.cardValues[i] == rep1)
std::swap(h.cardValues[no++], h.cardValues[i]);
@@ -152,7 +156,7 @@ void determinePriorityOrder(hand& h, std::unordered_set<int>& us)
case 7:
rep1 = determineRepeat(us, h.cardValues, 4, false);
- for (int i = 0; i < h.cardValues.size(); ++i)
+ for (uint64_t i = 0; i < h.cardValues.size(); ++i)
if (h.cardValues[i] == rep1)
std::swap(h.cardValues[no++], h.cardValues[i]);
break;
@@ -216,7 +220,7 @@ bool determineWinner(game g) //assumes no draws
if (g.hands[1].handValue > g.hands[0].handValue)
return true;
- for (int i = 0; i < g.hands[0].cardValues.size(); ++i)
+ for (uint64_t i = 0; i < g.hands[0].cardValues.size(); ++i)
{
if (g.hands[0].cardValues[i] > g.hands[1].cardValues[i])
return false;
@@ -234,12 +238,13 @@ int Euler::PokerHands()
std::ifstream fin;
fin.open("E:\Euler Resources\Euler 54.txt");
- int idx = 0;
- for (std::string line; std::getline(fin, line);)
- ++scores[determineWinner(determineHands(EulerUtility::strTokenizer(line, ' ')))];
+ for (std::string line; std::getline(fin, line);) {
+ std::vector<std::string> tokens = EulerUtility::strTokenizer(line, ' ');
+ ++scores[determineWinner(determineHands(tokens))];
+ }
fin.close();
return scores[0];
-}-
No newline at end of file
+}
diff --git a/Euler_64.cpp b/Euler_64.cpp
@@ -49,7 +49,7 @@
int period(int n)
{
- double n2 = std::sqrtl(n);
+ double n2 = sqrtl(n);
int a = n2, p = 0, q = 1, length = 0;
do
@@ -81,4 +81,4 @@ int Euler::OddPeriodSquareRoots()
}
return odds;
-}-
No newline at end of file
+}
diff --git a/Euler_7.cpp b/Euler_7.cpp
@@ -2,8 +2,6 @@
int Euler::Get10001stPrime()
{
- int noOfPrimes = 0;
-
bool is_prime;
int count = 2; //includes 2 & 3
diff --git a/Euler_74.cpp b/Euler_74.cpp
@@ -3,7 +3,7 @@
#include "Euler.h"
-int recurseChain(llui head, std::set<llui> &chain, int factorials[], int size)
+int recurseChain(llui head, std::set<llui> &chain, int factorials[], uint64_t size)
{
llui tempHead = head;
llui newHead = 0;
@@ -41,7 +41,7 @@ int Euler::DigitFactorialChains()
std::vector<std::vector<int>> solutions;
- for (int i = 1; i < 1e6; ++i)
+ for (uint64_t i = 1; i < 1e6; ++i)
{
bool ordered = true;
@@ -90,4 +90,4 @@ int Euler::DigitFactorialChains()
}
return total;
-}-
No newline at end of file
+}
diff --git a/Euler_75.cpp b/Euler_75.cpp
@@ -4,7 +4,7 @@
int Euler::UniquePerimeterRightAngledTriangles()
{
- int ceiling = 1500000;
+ llui ceiling = 1500000;
double sqrtCeiling = sqrt(ceiling);
std::vector<int> perimeters(ceiling + 1, 0);
@@ -36,4 +36,4 @@ int Euler::UniquePerimeterRightAngledTriangles()
}
return std::count(perimeters.begin(), perimeters.end(), 1);
-}-
No newline at end of file
+}
diff --git a/Euler_76.cpp b/Euler_76.cpp
@@ -3,6 +3,7 @@
ll partition(int n, std::vector<int> &cache)
{
ll p = 0;
+ std::vector<int> cache_ref = cache;
if(n >= 0)
{
@@ -10,9 +11,9 @@ ll partition(int n, std::vector<int> &cache)
{
return 1;
}
- if(cache[n - 1] != 0)
+ if(cache_ref[n - 1] != 0)
{
- return cache[n - 1];
+ return cache_ref[n - 1];
}
int k = 1;
@@ -27,12 +28,12 @@ ll partition(int n, std::vector<int> &cache)
int sign = (k - 1) & 1 ? -1 : 1;
- p += sign * partition(n - s1, cache);
- p += sign * partition(n - s2, cache);
+ p += sign * partition(n - s1, cache_ref);
+ p += sign * partition(n - s2, cache_ref);
++k;
}
- cache[n - 1] = p;
+ cache_ref[n - 1] = p;
}
return p;
@@ -40,5 +41,6 @@ ll partition(int n, std::vector<int> &cache)
int Euler::CountingSums()
{
- return partition(100, std::vector<int>(100, 0)) - 1;
-}-
No newline at end of file
+ std::vector<int> cache(100, 0);
+ return partition(100, cache) - 1;
+}
diff --git a/Euler_77.cpp b/Euler_77.cpp
@@ -1,10 +1,13 @@
+#include <algorithm>
+#include <cstdint>
+
#include "Euler.h"
int primeSumRecurse(int n, int max, std::vector<int> &primes)
{
int sum = 0;
- for(int i = max; i < primes.size(); i++)
+ for(uint64_t i = max; i < primes.size(); i++)
{
if (n - primes[i] == 0)
++sum;
@@ -31,4 +34,4 @@ int Euler::PrimeSummations()
}
return i;
-}-
No newline at end of file
+}
diff --git a/Euler_79.cpp b/Euler_79.cpp
@@ -1,3 +1,4 @@
+#include <algorithm>
#include <fstream>
#include <set>
@@ -38,4 +39,4 @@ std::string Euler::PasscodeDerivation()
}
return passcode;
-}-
No newline at end of file
+}
diff --git a/bigint/Euler_43.cpp b/bigint/Euler_43.cpp
@@ -46,7 +46,7 @@ BigInteger Euler::SubStringDivisibility()
BigInteger i = 0;
- for (unsigned long ul : divisiblePermutations)
+ for (uint64_t ul : divisiblePermutations)
i += ul;
return i;
diff --git a/bigint/Euler_53.cpp b/bigint/Euler_53.cpp
@@ -0,0 +1,15 @@
+#include <cstdint>
+
+#include "Euler.h"
+
+int Euler::CombinatoricSelections()
+{
+ int total = 0;
+
+ for (int i = 1; i <= 100; ++i)
+ for (int j = 1; j <= i; ++j)
+ if (EulerUtility::choose(i, j) > 1000000)
+ ++total;
+
+ return total;
+}
diff --git a/main.cpp b/main.cpp
@@ -7,21 +7,21 @@ int main() {
Euler e;
std::clock_t start = std::clock();
- //std::cout << e.SumOfMultiplesOf3And5Ceiling1000() << std::endl;
- //std::cout << e.SumOfEvenFibonacciNumbersCeiling4m() << std::endl;
- //std::cout << e.LargestPrimeFactor() << std::endl;
- //std::cout << e.LargestPalindromeFrom3DigitProduct() << std::endl;
- //std::cout << e.DivisibleBy1To20() << std::endl;
- //std::cout << e.DifferenceSumOfSquaresSquareOfSum100() << std::endl;
- //std::cout << e.Get10001stPrime() << std::endl;
- //std::cout << e.FindGreatestProductOf13AdjacentDigits() << std::endl;
- //std::cout << e.SpecialPythagoreanTriplet() << std::endl;
- //std::cout << e.SumOfPrimesUnder2m() << std::endl;
+ std::cout << e.SumOfMultiplesOf3And5Ceiling1000() << std::endl;
+ std::cout << e.SumOfEvenFibonacciNumbersCeiling4m() << std::endl;
+ std::cout << e.LargestPrimeFactor() << std::endl;
+ std::cout << e.LargestPalindromeFrom3DigitProduct() << std::endl;
+ std::cout << e.DivisibleBy1To20() << std::endl;
+ std::cout << e.DifferenceSumOfSquaresSquareOfSum100() << std::endl;
+ std::cout << e.Get10001stPrime() << std::endl;
+ std::cout << e.FindGreatestProductOf13AdjacentDigits() << std::endl;
+ std::cout << e.SpecialPythagoreanTriplet() << std::endl;
+ std::cout << e.SumOfPrimesUnder2m() << std::endl;
//std::cout << e.LargestProductInGrid() << std::endl;
//std::cout << e.TriangleNoWithGreaterThan500Divisors() << std::endl;
//std::cout << e.LargeSum() << std::endl;
//std::cout << e.CollatzConjecture() << std::endl;
- std::cout << e.LatticePaths() << std::endl;
+ //std::cout << e.LatticePaths() << std::endl;
//std::cout << e.DigitSum() << std::endl;
//std::cout << e.LetterCounter() << std::endl;
//std::cout << e.MaximumPathSum() << std::endl;
@@ -88,6 +88,5 @@ int main() {
//std::cout << e.SquareRootDigitalExpansion() << std::endl;
std::cout << "duration: " << std::clock() - start << "ms" << std::endl;
-
- std::cin.get();
+ return 0;
}