36 lines
759 B
Scala
36 lines
759 B
Scala
object Pi {
|
|
class PiIterator extends Iterable[BigInt]{
|
|
var r:BigInt=0
|
|
var q, t, k:BigInt=1
|
|
var n, l:BigInt=3
|
|
var nr, nn:BigInt=0
|
|
|
|
def iterator: Iterator[BigInt]=new Iterator[BigInt]{
|
|
def hasNext=true
|
|
def next():BigInt={
|
|
while((4*q+r-t) >= (n*t)) {
|
|
nr = (2*q+r)*l
|
|
nn = (q*(7*k)+2+(r*l))/(t*l)
|
|
q = q * k
|
|
t = t * l
|
|
l = l + 2
|
|
k = k + 1
|
|
n = nn
|
|
r = nr
|
|
}
|
|
val ret=n
|
|
nr = 10*(r-n*t)
|
|
n = ((10*(3*q+r))/t)-(10*n)
|
|
q = q * 10
|
|
r = nr
|
|
ret
|
|
}
|
|
}
|
|
}
|
|
|
|
def main(args: Array[String]): Unit = {
|
|
val it=new PiIterator
|
|
println((it head) + "." + (it take 300 mkString))
|
|
}
|
|
}
|