37 lines
814 B
Scala
37 lines
814 B
Scala
object Pi {
|
|
class PiIterator extends Iterable[BigInt] {
|
|
var r: BigInt = 0
|
|
var q, t, k: BigInt = 1
|
|
var n, l: BigInt = 3
|
|
|
|
def iterator: Iterator[BigInt] = new Iterator[BigInt] {
|
|
def hasNext = true
|
|
|
|
def next(): BigInt = {
|
|
while ((4 * q + r - t) >= (n * t)) {
|
|
val nr = (2 * q + r) * l
|
|
val 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
|
|
val 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))
|
|
}
|
|
|
|
}
|