【发布时间】:2014-09-02 18:27:27
【问题描述】:
我刚刚编写了一个程序,可以找到所有有上限的素数。
算法:埃拉托色尼筛法。
用 C 和 Java 编写。上限为 666014。
出于某种原因,C 会在超过 2.5 秒的时间内给出结果,而 Java 会在半秒内完成。
详情:
C 中的数组是 char 类型
Java 中的数组是布尔类型
C 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() Java 给出 0.35 秒
C 算法再快不过了。 Java在这里更快的原因是什么?
【问题讨论】:
-
您有问题吗?
-
示例代码在哪里?
-
根据您的标题,您在什么意义上谈论编译时间?
-
如果您分享一些 Java 版本和 C 版本的代码示例,将会很有帮助。仅提及您使用的数组不是很有帮助,因为您甚至没有指定数组的用途。
-
For some reason C gives the result in more than 2.5 seconds那么您是在告诉我们您的C编码技能达不到标准吗?
标签: java c intellij-idea codeblocks