Skip to content

Instantly share code, notes, and snippets.

@chris-scientist
Created April 6, 2021 22:05
Show Gist options
  • Save chris-scientist/82b8518f02519c00c13c8fd8130f54f6 to your computer and use it in GitHub Desktop.
Save chris-scientist/82b8518f02519c00c13c8fd8130f54f6 to your computer and use it in GitHub Desktop.
Calculer nombres premiers
package io.github.chrisscientist.pydefis.hacks.math;
import java.util.ArrayList;
import java.util.List;
/**
* Calculateur de nombres premiers.
* @author christopher
*/
public class ComputePrimeNumber {
/**
* Calculer les n nombres premiers
* @param n
* @return
*/
public static List<Integer> calculerNPremiers(int n) {
return calculerNPremiers(n, false);
}
/**
* Calculer les n nombres premiers, avec la possibilité de les affichés dans la console
* @param n
* @param debug
* @return
*/
public static List<Integer> calculerNPremiers(int n, boolean debug) {
// Calculer les n nombres premiers
List<Integer> premiers = new ArrayList();
while(premiers.size() != n) {
premiers.add(nbPremierSuivant(premiers.isEmpty() ? 2 : premiers.get(premiers.size() - 1) + 1));
}
// Afficher les nombres premiers
if(debug) {
for(int p : premiers) {
System.out.print((p==premiers.get(0)?"":",") + p);
}
System.out.println("");
}
return premiers;
}
/**
* Retourne le nombre premier suivant (c-à-d supérieur ou égale au nombre passé en paramètre)
* @param unNombre
* @return
*/
public static int nbPremierSuivant(int unNombre) {
int n = unNombre;
while(!estPremier(n)) {
n++;
}
return n;
}
/**
* Déterminer si le nombre en paramètre est premier
* @param unNombre
* @return
*/
public static boolean estPremier(int unNombre) {
if(unNombre<2) {
return false;
} else if(unNombre == 2) {
return true;
} else if(unNombre % 2 == 0) {
return false;
}
double racine = Math.sqrt(unNombre);
if(racine == (Double.valueOf(racine).intValue())) {
return false;
}
for(int i=3 ; i<racine; i+=2) {
if(unNombre%i == 0) {
return false;
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment