On souhaite écrire un programme calculant le nombre d'entiers premiers
dans un tableau de 1 000 000 entiers longs donné.
Pour savoir si un nombre est premier on utilisera la méthode suivante :
public static boolean isPrime(long n) {
return IntStream.rangeClosed(2, (int) Math.sqrt(n)).noneMatch(divisor -> n % divisor == 0);
}
On souhaite paralléliser le programme en permettant d'exécuter en même
temps plusieurs calculs sur différents CPUs. On va donc découper le
tableau par blocs de 1 000 valeurs (virtuellement, juste avec des index)
pour que chaque CPU calcule le nombre d'entiers premiers sur une partie du
tableau.
Pour les tests, on initialisera les cases du tableau avec des valeurs
aléatoires entre 1 et 1 000 000.
On cherche à écrire différentes façons de compter le nombre de lignes d'un
fichier en Java.
Pour tester, nous utiliserons
des textes de la bible
piochés quelque part sur internet.
Le code du
main sera donc le suivant :
public static void main(String[] args) throws IOException {
Path path = Paths.get("bible.txt");
System.out.println(countWithAStream(path));
// System.out.println(countWithAReader(path));
// System.out.println(countWithAReaderAndANIOCharBuffer(path));
// System.out.println(countWithAFileChannelAndANIOByteBuffer(path));
// System.out.println(countWithAFileChannelAndAMappedByteBuffer(path));
}