[Project Euler] – Problem 57

[This article was first published on YGC, 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.

It is possible to show that the square root of two can be expressed as an infinite continued fraction.

√ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + … ))) = 1.414213…

By expanding this for the first four iterations, we get:

1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666…
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379…

The next three expansions are 99/70, 239/169, and 577/408, but the eighth expansion, 1393/985, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator.

In the first one-thousand expansions, how many fractions contain a numerator with more digits than denominator?

?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
f <- function(i) {
	#x <- 1/2
	x <- c(1,2) ## numerator, denominator
	x <- gmp::as.bigz(x) # to support large sized integer values
	if (i > 1) {
		for (j in 2:i) {
			#x= 1/(2+x)
			x <- rev(c(x[2] * 2 + x[1], x[2]))
		}
	}
	#x <- 1 + x
	x <- c(x[2] + x[1], x[2])
	return(x)
}
 
dec.len <- function(d) {
	l <- length(unlist(strsplit(as.character(d), split="")))
	return(l)
}
 
is.longer <- function(x) {
	# x is a vector of length 2 c(numerator, denomiator)
	num.len <- dec.len(x[1])
	denom.len <- dec.len(x[2])
	if (num.len > denom.len) {
		return(TRUE)
	} else {
		return(FALSE)
	}
}
 
idx <- sapply(1:1000, function(x) is.longer(f(x)))
> sum(idx)
[1] 153

Related Posts

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

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)