project-euler–problem 65

[This article was first published on YGC » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

The square root of 2 can be written as an infinite continued fraction.
\( \sqrt{2} = 1+\frac{1}{2+\frac{1}{2+\frac{1}{2+\frac{1}{2+?}}}} \)

The infinite continued fraction can be written, √2 = [1;(2)], (2) indicates that 2 repeats ad infinitum. In a similar way, √23 = [4;(1,3,1,8)].

It turns out that the sequence of partial values of continued fractions for square roots provide the best rational approximations. Let us consider the convergents for √2.

\( 1+\frac{1}{2} = 3/2 \)
\( 1+\frac{1}{2+\frac{1}{2}} = 7/5 \)
\( 1+\frac{1}{2+\frac{1}{2+\frac{1}{2}}} = 17/12 \)
\( 1+\frac{1}{2+\frac{1}{2+\frac{1}{2+\frac{1}{2}}}} = 41/29 \)

Hence the sequence of the first ten convergents for √2 are:
1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, …

What is most surprising is that the important mathematical constant,
e = [2; 1,2,1, 1,4,1, 1,6,1 , … , 1,2k,1, …].

The first ten terms in the sequence of convergents for e are:
2, 3, 8/3, 11/4, 19/7, 87/32, 106/39, 193/71, 1264/465, 1457/536, …

The sum of digits in the numerator of the 10th convergent is 1+4+5+7=17.

Find the sum of digits in the numerator of the 100th convergent of the continued fraction for e.

?View Code RSPLUS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
e.expand <- function(n) {
    e0 <- 2
    e <- c(1,2,1)
    add <- c(0,2,0)
 
    len <- floor(n/3)-1
    x <- sapply(0:len, function(i) add * i) + e
    x <- as.vector(x)
    res <- c(e0, x)
    return(res)
}
 
get.fraction <- function(x) {
    ## 1/(x0 + a/x1)
    n <- length(x)
    x1 <- x[n-1] * x[n-2] + 1
    a <- x[n-2]
 
    for (i in (n-2):1) {
        old.x1 <- x1;
        x1 <- x[i] * x1 + a
        a <- old.x1
    }
    res <- list(numerator=x1, denumerator=a)
    return (res)
}
 
e <- e.expand(100)
res <- get.fraction(e)
numerator <- as.character(gmp::as.bigz(res$numerator))
s <- sum(as.numeric(unlist(strsplit(numerator, ""))))
print(s)

Related Posts

To leave a comment for the author, please follow the link and comment on their blog: YGC » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)