Je suis actuellement nouveau à java et à la programmation en général, je travaille sur un algorithme qui détermine les nombres premiers dans des gammes données spécifiques. Actuellement, il fonctionne avec six gammes qui sont des nombres inférieurs à 1 milliard, quand j'ai essayé de déterminer un nombre long de 10 chiffres, il a échoué. Je suis conscient qu'il doit être changé depuis longtemps car le chiffre est hors de portée, mais je ne suis pas sûr de savoir comment.Comment optimiser l'algorithme pour pouvoir déterminer les nombres premiers longs de 10 chiffres en Java
c'est la partie du code où il détermine si le umber est premier:
public ArrayList<Integer> getPrimes(int StartPos, int n) {
ArrayList<Integer> primeList = new ArrayList<>();
boolean[] primes = new boolean[n + 1];
for (int i = StartPos; i < primes.length; i++) {
primes[i] = true;
}
int num = 2;
while (true) {
for (int i = 2;; i++) {
int m = num * i;
if (m > n) {
break;
} else {
primes[m] = false;
}
}
boolean nextNum = false;
for (int i = num + 1; i < n + 1; i++) {
if (primes[i]) {
num = i;
nextNum = true;
break;
}
}
if (!nextNum) {
break;
}
}
for (int i = 0; i < primes.length; i++) {
if (primes[i]) {
primeList.add(i);
}
}
return primeList;
}
Je vérifiais en ligne et trouvé que peut-être que je pourrais le faire avec des vecteurs mais je n'ai aucune expérience avec eux et aussi ils sont relativement plus lents qu'un tableau.
Oui, les vecteurs sont plus lents que ArrayLists – Dakoda
Vous devriez trouver une autre méthode que le tamisage des eratosthènes. http://stackoverflow.com/questions/32035259/fastest-algorithm-to-find-if-a-biginteger-is-a-prime-number-or-not Je ne trouve pas de réponses à votre question autre que le fractionnement le calcaire en 2 méthodes, d'abord le tamis. –
'Je suis conscient que [arithmétique] doit être changé depuis longtemps car le [10ème] chiffre est hors limites [pour int]' pire encore, un tamis représente conventionnellement les nombres impairs, et 5E9 est plus grand que la valeur maximum de Java .MAX_VALUE' -> [tamis segmenté] (http://stackoverflow.com/questions/32390232/sieve-eratosthenes-greater-than-int/32391314#32391314). – greybeard