Project Euler: Problem45
昔書いたやつの BigInt 版。なんか一瞬で解けた。BigInt すごーい。
object Problem45 { class Generator (gen : BigInt => BigInt) extends Iterator[BigInt] { val this.gen = gen; var n = 0; def hasNext : Boolean = true; def next : BigInt = { n += 1; return gen(n); } } def main(args : Array[String]) : Unit = { var triangle = new Generator(n => n*(n+1)/2); var pentagonal = new Generator(n => n*(n*3-1)/2); var hexagonal = new Generator(n => n*(n*2-1)); var x = triangle.next(); var y = pentagonal.next(); var z = hexagonal.next(); while (true) { if (x==y && y==z) println(x); if (x < y) { if (x < z) x = triangle.next(); else z = hexagonal.next(); } else { if (y < z) y = pentagonal.next(); else z = hexagonal.next(); } } } }