Skip to content

Instantly share code, notes, and snippets.

@zerosum
Created January 30, 2013 10:35
Show Gist options
  • Select an option

  • Save zerosum/4672317 to your computer and use it in GitHub Desktop.

Select an option

Save zerosum/4672317 to your computer and use it in GitHub Desktop.
Project Euler: Problem 12
package euler.zerosum
object Euler0012 {
// 数xの因数iは、x = i^2 の場合を除き、対となる因数i'が存在する。
// √xを超えない自然数に含まれるxの因数の個数をnとするとき、
// xの全ての因数の個数は2nもしくは2n+1個である。
def main(args: Array[String]) {
println(getTriangle(1))
}
def getTriangle (n: Int): Int = {
val nTriangle = n*(n+1)/2
// √xを超えない自然数に含まれるxの因数を調べる
val divs = numbers(1).take(math.sqrt(nTriangle).toInt).filter(nTriangle%_ == 0)
if (2 * divs.length + 1 >= 500) nTriangle else getTriangle(n+1)
}
def numbers(from: Int):Stream[Int] = from #:: numbers(from + 1)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment