如何优化 Scala 中的理解和循环?
所以Scala应该和Java一样快。我正在重新审视Scala中的一些欧拉项目问题,这些问题最初是在Java中解决的。具体问题5:“被从1到20的所有数字均匀整除的最小正数是多少?
这是我的Java解决方案,在我的机器上需要0.7秒才能完成:
public class P005_evenly_divisible implements Runnable{
final int t = 20;
public void run() {
int i = 10;
while(!isEvenlyDivisible(i, t)){
i += 2;
}
System.out.println(i);
}
boolean isEvenlyDivisible(int a, int b){
for (int i = 2; i <= b; i++) {
if (a % i != 0)
return false;
}
return true;
}
public static void main(String[] args) {
new P005_evenly_divisible().run();
}
}
这是我对Scala的“直接翻译”,需要103秒(长147倍!
object P005_JavaStyle {
val t:Int = 20;
def run {
var i = 10
while(!isEvenlyDivisible(i,t))
i += 2
println(i)
}
def isEvenlyDivisible(a:Int, b:Int):Boolean = {
for (i <- 2 to b)
if (a % i != 0)
return false
return true
}
def main(args : Array[String]) {
run
}
}
最后,这是我对函数式编程的尝试,这需要39秒(长55倍)
object P005 extends App{
def isDivis(x:Int) = (1 to 20) forall {x % _ == 0}
def find(n:Int):Int = if (isDivis(n)) n else find (n+2)
println (find (2))
}
在Windows 7上使用Scala 2.9.0.1 64位。如何提高性能?我做错了什么吗?还是Java只是快得多?