项目欧拉2

时间:2013-11-12 02:29:09

标签: algorithm scala

我正在研究欧拉的问题二。 我想用这种方式解决它,比较之后的时间。

//找出Fibonacci序列中所有偶数项的总和,不超过四百万

我应该得到 // 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

    }

}

1 个答案:

答案 0 :(得分:5)

这是:

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