Own digits power sum: Difference between revisions
Content added Content deleted
(→Slow) |
(→Faster) |
||
Line 491: | Line 491: | ||
<pre> |
<pre> |
||
[153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153] |
[153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153] |
||
</pre> |
|||
===Faster=== |
|||
<syntaxhighlight lang="d"> |
|||
import std.stdio; |
|||
const int[10][10] powerTable = [ |
|||
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
|||
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], |
|||
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512], |
|||
[1, 3, 9, 27, 81, 243, 729, 2_187, 6_561, 19_683], |
|||
[1, 4, 16, 64, 256, 1_024, 4_096, 16_384, 65_536, 262_144], |
|||
[1, 5, 25, 125, 625, 3125, 15_625, 78_125, 390_625, 1_953_125], |
|||
[1, 6, 36, 216, 1_296, 7_776, 46_656, 279_936, 1_679_616, 10_077_696], |
|||
[1, 7, 49, 343, 2_401, 16_807, 117_649, 823_543, 57_64_801, 40_353_607], |
|||
[1, 8, 64, 512, 4_096, 32_768, 262_144, 2_097_152, 16_777_216, 134_217_728], |
|||
[1, 9, 81, 729, 6_561, 59_049, 531_441, 4_782_969, 43_046_721, 387_420_489] |
|||
]; |
|||
void digitsPowerSum(ref int Number, ref int DigitCount, int Level, int Sum) { |
|||
if (Level == 0) { |
|||
for (int Digits = 0; Digits <= 9; ++Digits) { |
|||
if (((Sum + powerTable[Digits][DigitCount]) == Number) && (Number >= 100)) { |
|||
writefln("%s: %s", DigitCount, Number); |
|||
} |
|||
++Number; |
|||
switch (Number) { |
|||
case 10: |
|||
case 100: |
|||
case 1_000: |
|||
case 10_000: |
|||
case 100_000: |
|||
case 1_000_000: |
|||
case 10_000_000: |
|||
case 100_000_000: |
|||
++DigitCount; |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
else { |
|||
for (int Digits = 0; Digits <= 9; ++Digits) { |
|||
digitsPowerSum(Number, DigitCount, Level - 1, Sum + powerTable[Digits][DigitCount]); |
|||
} |
|||
} |
|||
} |
|||
void main() { |
|||
int Number = 0; |
|||
int DigitCount = 1; |
|||
// |
|||
digitsPowerSum(Number, DigitCount, 9-1, 0); |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
3: 153 |
|||
3: 370 |
|||
3: 371 |
|||
3: 407 |
|||
4: 1634 |
|||
4: 8208 |
|||
4: 9474 |
|||
5: 54748 |
|||
5: 92727 |
|||
5: 93084 |
|||
6: 548834 |
|||
7: 1741725 |
|||
7: 4210818 |
|||
7: 9800817 |
|||
7: 9926315 |
|||
8: 24678050 |
|||
8: 24678051 |
|||
8: 88593477 |
|||
9: 146511208 |
|||
9: 472335975 |
|||
9: 534494836 |
|||
9: 912985153 |
|||
</pre> |
</pre> |
||