Java против C (время выполнения) РЕДАКТИРОВАТЬ: Добавлен код [закрыто]
Я только что написал программу, которая находит все простые числа с верхней границей.
Алгоритм: сито Эратосфена.
Написал это как на C, так и на Java. Верхняя граница 666014.
По какой-то причине C дает результат более чем за 2,5 секунды, а Java - за полсекунды.
Подробности:
Массив в C имеет тип char
Массив в Java имеет тип логический
C IDE: CodeBlocks
Java IDE: IntellijIdea Community Edition
Код 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 здесь быстрее?