Digit fifth powers: Difference between revisions

Content added Content deleted
(Added C++ (fast) version)
(→‎{{header|C++}}: exchanged autos for ints)
Line 246: Line 246:


=={{header|C++}}==
=={{header|C++}}==
Fast version. Checks numbers up to 399,999, which is above the requirement of 6 * 9<sup>5</sup> and well below the overkill value of 999,999.
Fast version.
<lang cpp>#include <iostream>
<lang cpp>#include <iostream>
#include <cmath>
#include <cmath>
Line 256: Line 256:
int nums[] = { 0,1,2,3,4,5,6,7,8,9 }, nu[] = { 0,1,2,3 },
int nums[] = { 0,1,2,3,4,5,6,7,8,9 }, nu[] = { 0,1,2,3 },
p5[10], t = 0;
p5[10], t = 0;
for (auto i : nums) p5[i] = pow(i, 5);
for (int i : nums) p5[i] = pow(i, 5);
for (auto i : nu) { // checks numbers up to 399999
for (int i : nu) { int im = i * 100000, ip = p5[i];
auto im = i * 100000, ip = p5[i];
for (int j : nums) { int jm = im + j * 10000, jp = ip + p5[j];
for (auto j : nums) {
for (int k : nums) { int km = jm + k * 1000, kp = jp + p5[k];
auto jm = im + j * 10000, jp = ip + p5[j];
for (int l : nums) { int lm = km + l * 100, lp = kp + p5[l];
for (auto k : nums) {
for (int m : nums) { int mm = lm + m * 10, mp = lp + p5[m];
auto km = jm + k * 1000, kp = jp + p5[k];
for (int n : nums) { int nm = mm + n;
for (auto l : nums) {
auto lm = km + l * 100, lp = kp + p5[l];
for (auto m : nums) {
auto mm = lm + m * 10, mp =lp + p5[m];
for (auto n : nums) {
auto nm = mm + n;
if (nm == mp + p5[n] && nm > 1) t += nm; } } } } } }
if (nm == mp + p5[n] && nm > 1) t += nm; } } } } } }
auto et = steady_clock::now();
auto et = steady_clock::now();