prime-number.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Wait event to calc prime number
  2. ipcRenderer.once('calc-prime-number', (event, number) => {
  3. const result = primalite(number);
  4. ipcRenderer.send('prime-number-result', result);
  5. });
  6. function primalite (nombre) {
  7. // Calcul de la racine carré du nombre a tester
  8. const sqrt = Math.ceil(Math.sqrt(nombre));
  9. // Recupération des nombres premiers inferieur à la racine
  10. const primeNumber = eratosthene(sqrt);
  11. // Test si le nombre est divisible par les nombres premiers
  12. for(const prime of primeNumber) {
  13. if (nombre % prime === 0) {
  14. // Le nombre est divisible et donc pas premier
  15. return false;
  16. }
  17. }
  18. // Si on arrive ici le nombre n'est pas divisible et donc premier
  19. return true;
  20. }
  21. function eratosthene (nombre) {
  22. const retour = [];
  23. const valeur = [];
  24. const marqueur = [];
  25. let compteur = 0;
  26. let mem = 0
  27. // Initilisation des tableaux
  28. for(let i = 2; i <= nombre; i++) {
  29. valeur[i - 2] = i;
  30. marqueur[i - 2] = 0;
  31. }
  32. // Parcours et elimination des nombres
  33. for (let i = 0; i <= nombre - 2; i++) {
  34. // Regarde si le nombre n'est pas déjà marqué
  35. if (marqueur[i] === 0) {
  36. // On marque tous les nombres multiple de ce nombre
  37. for(j = i + 1; j <= nombre - 2; j++) {
  38. if (valeur[j] % valeur[i] == 0) {
  39. marqueur[j] = 1;
  40. break;
  41. }
  42. }
  43. }
  44. // Augmentation compteur
  45. compteur++;
  46. }
  47. // Creation du resultat
  48. for(let i = 0; i < compteur; i++) {
  49. // Recuperation des nombres non marqué
  50. for(j = mem; j < nombre - 2; j++) {
  51. if (marqueur[j] === 0) {
  52. // Ajout du nombre
  53. retour[i] = valeur[j];
  54. // Pour ne pas le reprendre
  55. marqueur[j] = 2;
  56. mem = j;
  57. // Pour s'arreter
  58. break;
  59. }
  60. }
  61. }
  62. // Retour
  63. return retour;
  64. }