我剛剛寫了一個程序,找到所有素數與上限。Java vs C(運行時間)編輯:添加代碼
算法:Eratosthenes篩。
在C和Java中都寫了它。上限是666014.
出於某種原因,C給出的結果在超過2.5秒,而Java做它在像半秒鐘。
詳細說明:
在C中的陣列是char類型的
Java中的陣列是布爾類型的
ÇIDE:碼塊
Java IDE:IntellijIdea社區版
的C代碼:
#include <stdio.h>
int main() {
int n = 666013;
int i;
int k;
char a[n];
for (i = 2; i <= n; i++)
a[i] = 0;
for (i = 2; i <= n; i++)
if (a[i] == 0)
{
printf("%d\n", i);
for (k = i + i; k <= n; k += i)
a[k] = 1;
}
return 0;
}
Java代碼:
package primes;
public class Prime {
public static void main(String[] args) {
long starttime = System.nanoTime();
final int MAXN = 666013;
boolean a[] = new boolean[MAXN];
for (int i = 2; i < a.length; i++)
a[i] = true;
for (int i = 2; i < a.length; i++)
if (a[i])
{
System.out.println(i);
System.out.printf("");
for (int j = i + i; j < a.length; j += i) {
a[j] = false;
}
}
System.out.println(System.nanoTime() - starttime);
}
}
最後編輯:使用System.nanoTime() 爪哇給出0.35秒
的C算法不能被任何更快。 Java在這裏更快的原因是什麼?
您有問題嗎? – 2014-09-02 18:28:12
問題是? :D – 2014-09-02 18:28:21
如果你打算做交叉測試,那麼使用相同的數據類型會更聰明 – Juxhin 2014-09-02 18:29:39