关闭。这个问题需要details or clarity .它目前不接受答案。
想改进这个问题?通过 editing this post 添加详细信息并澄清问题.
7年前关闭。
Improve this question
我刚刚编写了一个程序,可以找到所有具有上限的素数。
算法:埃拉托色尼筛法。
用 C 和 Java 编写。上限为 666014。
出于某种原因,C 在超过 2.5 秒内给出结果,而 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在这里更快的原因是什么?
最佳答案
我敢打赌,即使您在问题标题中列出了编译时间,您实际上也是在询问运行时间。如果您尝试对编译进行计时,那么它真的很适合橘子,特别是如果您在 IDE 中而不是使用命令行进行编译。
如果您将 Java 应用程序与 C++ 应用程序进行比较,那么您必须考虑很多事情。
坦率地说,您的评估非常依赖于代码。如果不显示代码,人们将无法帮助您。即使是最简单的代码,你也可以做很多很多事情来影响时间。
关于Java 与 C(运行时)编辑 : Added Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629921/