There's some sleight of hand here. Not all the digits are exactly right. Look how it skips from 997 to 999:<p><a href="http://www.futilitycloset.com/2012/01/08/math-notes-76/" rel="nofollow">http://www.futilitycloset.com/2012/01/08/math-notes-76/</a><p>Here's the math. Suppose you want a unit fraction 1/n with decimals that cycle through the 4-digit sequence abcd. Multiply by 10^4 to shift abcd into integer position, leaving repeating copies after the decimal point:<p><pre><code> 10^4/n = abcd + 1/n
</code></pre>
Solving for n gives n = (10^4 - 1) / abcd.<p>More generally, if you want to get a cycle equal to the d digits of an integer k, you want n = (10^d - 1) / k.<p>However, this only gives a true unit fraction when k divides 10^d - 1, so that n is an integer. Otherwise you are forced to truncate n and getting an approximate version of the cycle.<p>That's exactly what happened here: 10^d - 1 is not divisible by the integer 001002...998999.<p>Here's a small Python program that will generate the unit fraction given the number of digits to cycle through:<p><pre><code> import sys
n = int(sys.argv[1])
s = ''.join(("%0" + str(n) + "d") % (i,) for i in range(10**n))
print "1/%d" % ((10**len(s) - 1) / int(s),)
</code></pre>
Usage:<p><pre><code> $ python magic.py 3
1/998001
$ python magic.py 4
1/99980001
</code></pre>
This has just the right flavor for a Project Euler problem.
A simple way to figure out how this works is to figure out another way to write it out. For the simpler case (1/9801) = 0.00010203...<p><pre><code> 0.00
+ 0.0001
+ 0.000002
+ 0.00000003
...
--------------
</code></pre>
Each row is equal to x, but shifted over 2x digits. This is the same as dividing by 10^x. This simplifies to the formula:<p><pre><code> sum k=0 to infinity: k/(10^k)
</code></pre>
This is fairly easily calculable, and results in 1/9801. Try it yourself on wolfram alpha: <a href="http://www.wolframalpha.com/input/?i=%28sum_%28k%3D1%29%5Einfinity%28%28k-1%29%2F%28100%5Ek%29%29" rel="nofollow">http://www.wolframalpha.com/input/?i=%28sum_%28k%3D1%29%5Ein...</a>
The general any-number-base-b rule here (as others have noticed in base 10^k) is that<p>1/(b-1)^2 = 0.0123456... (where '1', '2'.. are base b digits).<p>The original post is this fact in base 1000.<p>Proof for any base: 1/(b-1) = 1/b + 1/b^2 + 1/b^3 + .. = 0.11111.. (base b).<p>So 1/(b-1)^2 = 0.11111.. * (1/b + 1/b^2 + 1/b^3 + ...) = 0.012345... QED.<p>Richard Feynman beat us all to the punch here by noticing that 1/243 = 0.004115226337..., a fact which he wrote in a letter from a secret lab to someone in the outside world, and which put him under suspicion of sending secret messages! That gem of a fraction turns out to be a result of the above stuff as 1/243 = 111 * (1/999^2) + 4/999.<p>Here's a slightly more detailed explanation:<p><a href="http://tylerneylon.com/b/archives/51" rel="nofollow">http://tylerneylon.com/b/archives/51</a>
I just want to repeat bdg's appreciation for the people who are explaining the actual theory, which is the interesting part. Funky results from arbitrary arithmetic is just a step short of numerology and while it's nifty in a stage magic kind of way, it's a little sad overall when you have no idea <i>why</i> that's the way it is.
This can be seen in python with (I had to dig into the docs for this, so here are the fruits of my labor :) )<p><pre><code> import decimal
decimal.getcontext().prec=1000
dec = decimal.Decimal(1)/decimal.Decimal(998001)
#now doctor it up to see the numbers
strdec = str(dec)[2:] #chop off the '0.'
nums = zip(strdec[::3],strdec[1::3],strdec[2::3])
print nums</code></pre>
... and 1/9999999800000001 =
.00000000 00000001 00000002 00000003 00000004 00000005 00000006 ... 99999996 99999997 99999999 ...repeating<p>Basically, the pattern is
1 over some number of 9s, followed by an 8, followed by the same number of 0s, followed by a 1.<p>So, 1/81, 1/9801, 1/998001, 1/99980001, 1/9999800001, etc.
You can see it at Wolfram Alpha <a href="http://www.wolframalpha.com/input/?i=1%2F998001" rel="nofollow">http://www.wolframalpha.com/input/?i=1%2F998001</a>
I was searching for some iOS documentation and found this and it's totally ruined my productivity!<p>Can anyone explain why it repeats in this way, or link to a place that has an explanation?
<p><pre><code> ;Here is my version in Common Lisp
;Supply your own flatten function
;or borrow one from let-over-lambda or something
;http://letoverlambda.com/lol.lisp
(defun long-div (dividend divisor depth)
(cond
((> depth 0)
(flatten (list
(truncate (/ dividend divisor))
(long-div (* 10 (mod dividend divisor))
divisor (- depth 1)))))
(t ())))</code></pre>
The source with real (readable) text, without annoying animation:<p><a href="http://www.futilitycloset.com/2012/01/08/math-notes-76/" rel="nofollow">http://www.futilitycloset.com/2012/01/08/math-notes-76/</a>
Thanks for posting. I'm trying to keep a collection of these type of things so that when she's ready, it'll be another tool to get/keep my daughter excited about math.
You can find the Catalan numbers buy computing 500,000,000,000 - Sqrt(500,000,000,000*500,000,000,000 - 1)....<p><a href="http://people.csail.mit.edu/devadas/numerics_demo/chord.html" rel="nofollow">http://people.csail.mit.edu/devadas/numerics_demo/chord.html</a><p>For an explanation better than I can provide of what they are and how it works, see 6.006 lecture 11 notes!<p><a href="http://courses.csail.mit.edu/6.006/fall11/lectures/lecture11.pdf" rel="nofollow">http://courses.csail.mit.edu/6.006/fall11/lectures/lecture11...</a>
Slightly off-topic, but it bugs me that the article feels obliged to contain a picture of the number. Firstly, why the hell would you want to display plain text as a picture? Secondly, if I click through to the source, I get a slightly better picture. Did IHC take a photo of the original website with their phone camera and upload it? Mind is boggling. Encouraged by the better quality picture on geekosystem I decided to click through to THEIR source. And there's a plaintext version. Kudos to <a href="<a href="http://www.futilitycloset.com/2012/01/08/math-notes-76/<FutilityCloset</a>" rel="nofollow">http://www.futilitycloset.com/2012/01/08/math-notes-76/<...</a>; for having a modicum of common sense.
This reminded me of a fun fact from an old professor's paper:
1/99007599 has a binary expansion of period 48993900.<p><a href="http://www.math.ucsb.edu/~agboola/teaching/2005/winter/old-115A/murty.pdf" rel="nofollow">http://www.math.ucsb.edu/~agboola/teaching/2005/winter/old-1...</a>
For all squares, <a href="http://m.wolframalpha.com/input/?i=100010000%2F999700029999&x=0&y=0" rel="nofollow">http://m.wolframalpha.com/input/?i=100010000%2F999700029999&...</a>
100010000/999700029999
Tack on extra 0s and 9s to allocate more digits per square.
Incidentally, understanding how this works is helpful to programmers. If you know why this happens, you'll know why you can't write:<p><pre><code> double x = 0.1;
</code></pre>
and get something that works.
Did you read on Egyptian fractions? <a href="http://en.wikipedia.org/wiki/Egyptian_fraction" rel="nofollow">http://en.wikipedia.org/wiki/Egyptian_fraction</a><p>:)