commit 027afc3bdfdf3ab1c5fbdb8f3896c94f20168497
parent 8acf35a296caafae65f26643c9381bd3e6e41e53
Author: mpizzzle <m@michaelpercival.xyz>
Date: Thu, 24 Sep 2020 17:58:55 +0100
safety commit
Diffstat:
6 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/Euler.h b/Euler.h
@@ -84,4 +84,6 @@ public:
int SquareRootDigitalExpansion();
uint64_t PrimePowerTriples();
uint64_t CuboidRoute();
+ uint64_t AlmostEquilateralTriangles();
+ int AmicableChains();
};
diff --git a/Euler_86.cpp b/Euler_86.cpp
@@ -1,5 +1,7 @@
#include "Euler.h"
+//this can be sped up significantly by not recalculating previously found solutions but cba tbh fam
+//precalculating all the squares might also be worth it, but would be a minor optimisation compared to above
uint64_t Euler::CuboidRoute()
{
for (int M = 100;; ++M) {
diff --git a/Euler_94.cpp b/Euler_94.cpp
@@ -0,0 +1,28 @@
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "Euler.h"
+
+uint64_t Euler::AlmostEquilateralTriangles()
+{
+ //where s = semiperimeter (((2 * a) + b) / 2), b = a +- 1
+ //A = sqrt(s * ((s - a) ^ 2) * (s - b))
+ //A = sqrt((a + (b / 2)) * ((b / 2) ^ 2) * (a - (b / 2)))
+ //A = sqrt((a + (a +- 1 / 2)) * ((a +-1 / 2) ^ 2) * (a - (a +-1 / 2)))
+ uint64_t perimeter = 0;
+ uint64_t bil = 1000000000;
+
+ for (uint64_t side = 3; side < bil / 2; side += 2) {
+ number<cpp_dec_float<50>> area1 = sqrt((side + ((side + 1) / 2)) * pow(((side + 1) / 2), 2) * (side - ((side + 1) / 2)));
+ number<cpp_dec_float<50>> area2 = sqrt((side + ((side - 1) / 2)) * pow(((side - 1) / 2), 2) * (side - ((side - 1) / 2)));
+
+ if (area1 == boost::multiprecision::floor(area1) && ((3 * side) + 1) < bil) {
+ perimeter += (3 * side) + 1;
+ //std::cout << side << ", " << side << ", " << side + 1 << ", area: " << area1 << std::endl;
+ }
+ if (area2 == boost::multiprecision::floor(area2) && ((3 * side) - 1) < bil) {
+ perimeter += (3 * side) - 1;
+ //std::cout << side << ", " << side << ", " << side - 1 << ", area: " << area2 << std::endl;
+ }
+ }
+
+ return perimeter;
+}
diff --git a/Euler_95.cpp b/Euler_95.cpp
@@ -0,0 +1,6 @@
+#include "Euler.h"
+
+int Euler::AmicableChains()
+{
+ return 0;
+}
diff --git a/Makefile b/Makefile
@@ -13,6 +13,7 @@ _OBJ = main.o
Euler_61.o Euler_62.o Euler_63.o Euler_64.o Euler_68.o Euler_69.o Euler_70.o
Euler_71.o Euler_72.o Euler_73.o Euler_74.o Euler_75.o Euler_76.o Euler_77.o Euler_79.o Euler_80.o
Euler_86.o Euler_87.o
+ Euler_94.o Euler_95.o
EulerUtility.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
diff --git a/main.cpp b/main.cpp
@@ -88,8 +88,10 @@ int main() {
//std::cout << "problem 78: " << "(skipped)" << std::endl; //<< e.CoinPartitions() << std::endl;
//std::cout << "problem 79: " << e.PasscodeDerivation() << std::endl; //wrong
//std::cout << "problem 80: " << e.SquareRootDigitalExpansion() << std::endl;
- std::cout << "problem 86: " << e.CuboidRoute() << std::endl;
+ //std::cout << "problem 86: " << e.CuboidRoute() << std::endl;
//std::cout << "problem 87: " << e.PrimePowerTriples() << std::endl;
+ //std::cout << "problem 94: " << e.AlmostEquilateralTriangles() << std::endl;
+ std::cout << "problem 95: " << e.AmicableChains() << std::endl;
std::cout << "duration: " << 1000.0 * (std::clock() - start) / CLOCKS_PER_SEC << "ms" << std::endl;
return 0;