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:
10^4/n = abcd + 1/n
Solving for n gives n = (10^4 - 1) / abcd.
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.
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.
That's exactly what happened here: 10^d - 1 is not divisible by the integer 001002...998999.
Here's a small Python program that will generate the unit fraction given the number of digits to cycle through:
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),)
I just want to know I appreciate you posting this. Some people might be interested in "wow math sure can do some funky stuff", but others like myself really want to know why. I figure that's also covers a sizable group of us here on Hacker News.
It's a bit sneaky to say it generates all three-digit numbers when 998 clearly isn't there, but as onedognight pointed out below, the leading 1 from the 1000 which follows 999 will cause 999 to overflow into 1000, which turns the 998 into a 999.
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.
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 why 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 :) )
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
The period is 2997, so set precision to 2997 if you want to see the repeat. Also, "998" doesn't appear 'in sequence' (it obviously appears as 97[9 98]0 981).
;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 ())))
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.
def long_div(x,y,N=10):
"""Given two integers x and y, return us the N digits of x/y."""
#First work out the integer part
x = int(x)
divisor = y = int(y)
quotients = [x/y]
dividend = x % y
for digit in range(N):
dividend *= 10
quotient = dividend/divisor
dividend = dividend%divisor
quotients.append(quotient)
return quotients
def pretty_print(quotients, G=3):
"""Pretty print quotients by grouping digits by 3."""
strp = ''
cnt = 1
for n in quotients[1:]:
strp += str(n)
cnt +=1
if cnt > G:
print strp
strp = ''
cnt = 1
quotients = long_div(1,998001,N=3000)
pretty_print(quotients,G=3)
The way I was introduced to this was as a math trick: Pick a number 1-9, multiply by 9, then 12345679, and you get a string of whatever number you picked.
Also, pick any three-digit number, multiply by 7, 11, and 13 (or 1001), and you get your three-digit number repeated twice.
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="http://www.futilitycloset.com/2012/01/08/math-notes-76/<...; for having a modicum of common sense.
[+] [-] psykotic|14 years ago|reply
http://www.futilitycloset.com/2012/01/08/math-notes-76/
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:
Solving for n gives n = (10^4 - 1) / abcd.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.
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.
That's exactly what happened here: 10^d - 1 is not divisible by the integer 001002...998999.
Here's a small Python program that will generate the unit fraction given the number of digits to cycle through:
Usage: This has just the right flavor for a Project Euler problem.[+] [-] bdg|14 years ago|reply
[+] [-] chadzawistowski|14 years ago|reply
[+] [-] unknown|14 years ago|reply
[deleted]
[+] [-] hashfold|14 years ago|reply
[+] [-] fryguy|14 years ago|reply
[+] [-] tylerneylon|14 years ago|reply
1/(b-1)^2 = 0.0123456... (where '1', '2'.. are base b digits).
The original post is this fact in base 1000.
Proof for any base: 1/(b-1) = 1/b + 1/b^2 + 1/b^3 + .. = 0.11111.. (base b).
So 1/(b-1)^2 = 0.11111.. * (1/b + 1/b^2 + 1/b^3 + ...) = 0.012345... QED.
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.
Here's a slightly more detailed explanation:
http://tylerneylon.com/b/archives/51
[+] [-] saraid216|14 years ago|reply
[+] [-] skeptical|14 years ago|reply
[deleted]
[+] [-] archgoon|14 years ago|reply
[+] [-] boredguy8|14 years ago|reply
[+] [-] VMG|14 years ago|reply
[+] [-] mkmk|14 years ago|reply
[+] [-] wtn|14 years ago|reply
require 'bigdecimal'; BigDecimal.new(1).div(998001, 2997)
[+] [-] phzbOx|14 years ago|reply
[+] [-] jerfelix|14 years ago|reply
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.
So, 1/81, 1/9801, 1/998001, 1/99980001, 1/9999800001, etc.
[+] [-] xuki|14 years ago|reply
[+] [-] troystribling|14 years ago|reply
[+] [-] kenver|14 years ago|reply
Can anyone explain why it repeats in this way, or link to a place that has an explanation?
[+] [-] knerd83|14 years ago|reply
[+] [-] unknown|14 years ago|reply
[deleted]
[+] [-] deltasquared|14 years ago|reply
[+] [-] m_for_monkey|14 years ago|reply
http://www.futilitycloset.com/2012/01/08/math-notes-76/
[+] [-] easy_rider|14 years ago|reply
[+] [-] slamdunc|14 years ago|reply
[+] [-] skystorm|14 years ago|reply
[+] [-] adeelk|14 years ago|reply
[+] [-] onedognight|14 years ago|reply
[+] [-] onedognight|14 years ago|reply
[+] [-] kghose|14 years ago|reply
[+] [-] tspiteri|14 years ago|reply
[+] [-] jeffcapeshop|14 years ago|reply
[+] [-] bbloomberg|14 years ago|reply
http://people.csail.mit.edu/devadas/numerics_demo/chord.html
For an explanation better than I can provide of what they are and how it works, see 6.006 lecture 11 notes!
http://courses.csail.mit.edu/6.006/fall11/lectures/lecture11...
[+] [-] dimitar|14 years ago|reply
12345679 * 9 = 111111111
12345679 * 18 = 222222222
12345679 * 27 = 333333333
12345679 * 36 = 444444444
12345679 * 45 = 555555555
12345679 * 54 = 666666666
12345679 * 63 = 777777777
12345679 * 72 = 888888888
12345679 * 81 = 999999999
12345679 * 999999999 = 12345678987654321
[+] [-] grusk|14 years ago|reply
Also, pick any three-digit number, multiply by 7, 11, and 13 (or 1001), and you get your three-digit number repeated twice.
[+] [-] buddydvd|14 years ago|reply
[+] [-] donnawarellp|14 years ago|reply
[deleted]
[+] [-] reedcat|14 years ago|reply
Love the trick with how this can be done via differentiating the equation:
1 + r + r^2 + ... = 1/(1-r)
[+] [-] liljimmytables|14 years ago|reply
[+] [-] soosh|14 years ago|reply
http://www.math.ucsb.edu/~agboola/teaching/2005/winter/old-1...
[+] [-] jbdevon|14 years ago|reply
[+] [-] tspiteri|14 years ago|reply
[+] [-] dbieber|14 years ago|reply
[+] [-] unknown|14 years ago|reply
[deleted]