Je viens d’écrire un programme qui trouve tous les nombres premiers avec une limite supérieure.
L’algorithme: Tamis d’Eratosthenes.
A écrit à la fois en C et en Java. La limite supérieure est 666014.
Pour une raison quelconque, C donne le résultat en plus de 2,5 secondes, alors que Java le fait en une demi-seconde.
Détails:
Le tableau en C est de type char
Le tableau en Java est de type boolean
C IDE: CodeBlocks
IDE Java: Édition IntellijIdea Community
Code C:
#include 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; }
Code Java:
package primes; public class Prime { public static void main(Ssortingng[] 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); } }
Dernière édition: utilisé System.nanoTime () Java donne 0,35 seconde
L’algorithme C ne peut pas être plus rapide. Quelle est la raison pour laquelle Java est plus rapide ici?
Je parie que vous vous interrogez sur le temps d’exécution même si vous avez indiqué l’heure de la compilation dans l’en-tête de votre question. Si vous essayez de chronométrer la compilation, c’est vraiment une pomme d’orange, surtout si vous la faites dans des IDE au lieu d’utiliser la ligne de commande.
Si vous comparez une application Java à une application C ++, vous devez tenir compte de nombreux éléments.
Franchement, votre évaluation dépend beaucoup du code. Sans montrer le code, les gens ne peuvent pas vous aider. Il y a beaucoup de choses que vous pouvez faire pour affecter les timings dans le code le plus simple.