-3

オイラーの問題 2 に取り組んでいます。このように解きたかったのですが、 の後の時間を比較します。

// 400 万を超えないフィボナッチ数列のすべての偶数項の合計を求めます

//A: 4613732 を取得する必要があります

しかし、私は膨大な数を取得しています:

177112424089630957537

誰かが理由を説明できますか?

    def Fibonaccu(max: Int) : BigInt = {
            var a:BigInt = 0
            var b:BigInt = 1
            var sum:BigInt= 0
            var i:BigInt = 0;

            while(i < max){
                i+=1
                b = a + b 
                a = b - a   
                if (b % 2 == 0) sum += b 

            }

        //Return 
    println(sum)
    sum

    }

}
4

1 に答える 1

7

ここにあります:

scala> val fib: Stream[Int] = 0 #:: fib.scanLeft(1)(_+_)
fib: Stream[Int] = Stream(0, ?)

scala> fib.takeWhile(4000000>).filter(_%2 == 0).sum
res0: Int = 4613732

そして、ここにあなたのコードに基づいています:

scala> def Fibonaccu(max: Int) : BigInt = {
     |             var a:BigInt = 0
     |             var b:BigInt = 1
     |             var sum:BigInt= 0
     |             while(b < max) {
     |                 if(b % 2 == 0) sum += b
     |                 b = a + b
     |                 a = b - a
     |             }
     |             sum
     | }
Fibonaccu: (max: Int)BigInt

scala> Fibonaccu(4000000)
res1: BigInt = 4613732
于 2013-11-12T02:48:59.773 に答える