The eighty six non-trivial powers ≤ 2^20
Tonight Jamu Kakar mentioned in IRC that a program of his had unexpectedly crashed after processing 1,048,376 items. I think it’s a useful debugging skill to have to be able to recognize numbers like that (it’s very close to 2^20). I’ve often wanted to write a tiny program to print out all the non-trivial powers, and since I have far more important and pressing things to be doing, I immediately went to write the code. At a minimum it seems prudent to recognize all powers up to 1000, and the powers of 2 to much higher. Below you have all 86 non-trivial powers up to 2^20. I don’t know them all, but I wish I did.
4 = 2^2 729 = 3^6, 9^3 32768 = 2^15, 8^5 8 = 2^3 1000 = 10^3 38416 = 14^4 9 = 3^2 1024 = 2^10, 4^5 46656 = 6^6 16 = 2^4, 4^2 1296 = 6^4 50625 = 15^4 25 = 5^2 1331 = 11^3 59049 = 3^10, 9^5 27 = 3^3 1728 = 12^3 65536 = 2^16, 4^8, 16^4 32 = 2^5 2048 = 2^11 78125 = 5^7 36 = 6^2 2187 = 3^7 83521 = 17^4 49 = 7^2 2197 = 13^3 100000 = 10^5 64 = 2^6, 4^3, 8^2 2401 = 7^4 104976 = 18^4 81 = 3^4, 9^2 2744 = 14^3 117649 = 7^6 100 = 10^2 3125 = 5^5 130321 = 19^4 121 = 11^2 3375 = 15^3 131072 = 2^17 125 = 5^3 4096 = 2^12, 4^6, 8^4, 16^3 160000 = 20^4 128 = 2^7 4913 = 17^3 161051 = 11^5 144 = 12^2 5832 = 18^3 177147 = 3^11 169 = 13^2 6561 = 3^8, 9^4 248832 = 12^5 196 = 14^2 6859 = 19^3 262144 = 2^18, 4^9, 8^6 216 = 6^3 7776 = 6^5 279936 = 6^7 225 = 15^2 8000 = 20^3 371293 = 13^5 243 = 3^5 8192 = 2^13 390625 = 5^8 256 = 2^8, 4^4, 16^2 10000 = 10^4 524288 = 2^19 289 = 17^2 14641 = 11^4 531441 = 3^12, 9^6 324 = 18^2 15625 = 5^6 537824 = 14^5 343 = 7^3 16384 = 2^14, 4^7 759375 = 15^5 361 = 19^2 16807 = 7^5 823543 = 7^7 400 = 20^2 19683 = 3^9 1000000 = 10^6 512 = 2^9, 8^3 20736 = 12^4 1048576 = 2^20, 4^10, 16^5 625 = 5^4 28561 = 13^4
I produced the above with this quick hack:
from collections import defaultdict
powers = defaultdict(list)
lim = 20
for a in range(2, lim + 1):
for b in range(2, lim + 1):
n = a ** b
if n > 2 ** lim:
break
powers[n].append((a, b))
for n in sorted(powers.keys()):
print '%7d = %s' % (n,
', '.join('%d^%d' % (a, b)
for (a, b) in powers[n]))
You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.
March 31st, 2011 at 2:36 am
Interesting post. This made me curious about how I would approach this in Perl 6. It turns out the answer was: pretty much exactly the same. See: http://essays.ajs.com/2011/03/perl-6-for-finding-non-trivial-powers.html
November 11th, 2011 at 5:00 am
I’ve used the term “Computational Numerology” for this kind of analysis; I once solved a locking problem by noticing (via strace) a call to sleep(4294967) and recognizing what it had to be. (I’ll follow up with the result later…)
November 11th, 2011 at 5:04 am
Ha, nice (I had to google it).