Vì vậy, Scala được cho là nhanh như Java. Tôi đang xem lại một số vấn đề của Project Euler trong Scala mà ban đầu tôi đã giải quyết bằng Java. Cụ thể Bài toán 5: "Số dương nhỏ nhất chia hết cho tất cả các số từ 1 đến 20 là bao nhiêu?"
Đây là giải pháp Java của tôi, mất 0,7 giây để hoàn thành trên máy của tôi:
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();
}
}
Đây là "bản dịch trực tiếp" của tôi sang Scala, mất 103 giây (lâu hơn 147 lần!)
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
}
}
Cuối cùng, đây là nỗ lực của tôi trong lập trình chức năng, mất 39 giây (lâu hơn 55 lần)
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))
}
Sử dụng Scala 2.9.0.1 trên Windows 7 64 bit. Làm cách nào để cải thiện hiệu suất? Tôi có làm điều gì sai? Hay là Java nhanh hơn rất nhiều?
run
phương pháp?