스칼라는 자바만큼 빠르다. 스칼라에서 원래 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();
}
}
스칼라로의 "직접 번역"은 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 64 비트에서 Scala 2.9.0.1 사용 성능을 개선하려면 어떻게합니까? 내가 뭔가 잘못하고 있습니까? 아니면 Java가 훨씬 더 빠릅니까?
run
방법의 타이밍을 시도 했습니까 ?