L'éditeur suivant partagera avec vous un exemple de code pour implémenter l'énumération anti-prime Emrips en JavaScript. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Suivons l'éditeur pour y jeter un œil
Aujourd'hui, j'ai vu un kata, qui proposait le concept d'"emirps" : après avoir inversé un nombre premier, un nombre premier différent est obtenu. Ce nombre est appelé "emirps". .
Par exemple : 13,17 sont des nombres premiers, 31,71 sont aussi des nombres premiers, 13 et 17 sont des "émirps". Mais les nombres premiers 757 787 797 sont des nombres premiers palindromiques, ce qui signifie que les nombres inversés sont les mêmes que les nombres originaux, ils ne sont donc pas considérés comme des « émirps ».
La question nécessite d'écrire une fonction qui saisit un entier positif n et renvoie le nombre d'"emirps" inférieur à n, le plus grand "emirps" et la somme de tous les "emirps" inférieurs à n.
L'idée pour résoudre le problème est d'abord d'énumérer tous les nombres premiers inférieurs à n, puis d'éliminer les nombres premiers palindromes et les nombres composés après avoir été inversés.
Écrivez d'abord la fonction pour déterminer les nombres premiers
Principalement basé sur trois conclusions mathématiques :
Tous les nombres composés sont le produit de plusieurs nombres premiers
Si un nombre peut être factorisé, alors les deux facteurs doivent être un inférieur ou égal à sqrt(n) et un supérieur supérieur ou égal à sqrt(n ).
Tous les nombres premiers supérieurs à 3 sont sous la forme 6X+1 ou 6X-1, qui sont des nombres adjacents multiples de 6, mais tous les 6X+1 ou 6X-1 ne sont pas des nombres premiers.
La première conclusion peut être prouvée par preuve par contradiction
La troisième conclusion est prouvée :
Nous exprimons toutes les nombres Il se présente sous la forme suivante 6X-1, 6X, 6X+1, 6X+2, 6X+3, 6X+4 (X est un entier positif) 6X => 3x+1) 6X +3 => 3(2x+1) 6X+4 => 2(3x+2) Il peut être prouvé que ce ne sont certainement pas des nombres premiers, c'est-à-dire que les nombres premiers ne peuvent être que 6X- 1 ou 6X-1
Code :
function isPrimeNumber(num){ if(num == 2 || num == 3){ return true; }/*2、3特殊处理*/ if(num % 6 != 1 && num % 6 != 5){ return false; }/*根据结论三排除*/ for(var i=5;i<=Math.sqrt(num);i+=6){ if(num % i == 0 || num % (i+2) == 0){ return false; } }/*根据结论二、结论三排除*/ return true; }
Supprimer les nombres premiers palindromiques et les nombres composés après inversion
Code :
function emirpNumber(num){ var reverseNumber = Number(String(num).split('').reverse().join('')) if(reverseNumber != num && isPrimeNumber(reverseNumber)){ return true; } else{ return false; } }
Enfin, sortez le résultat souhaité
Code :
function findEmirp(n){ var emirpGroup = []; for(var i=1;i<n;i++){ if(isPrimeNumber(i) && emirpNumber(i)){ emirpGroup.push(i); } } return [ 'n为:' + n, '数量为:' + emirpGroup.length, '最大数:' + emirpGroup[emirpGroup.length - 1], '求和:' + emirpGroup.reduce(function(total,current){ return total + current; }) ] }
Regardez le résultat et l'heure de sortie
n=1000000 :
n=10000000 :
J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.
Articles associés :
Comment implémenter un mécanisme d'événements personnalisés à l'aide de Javascript
Interprétation détaillée de la structure des données cartographiques en javascript
Comment développer un calendrier hebdomadaire en deux dimensions à l'aide de Javascript
À propos de JS Abstract Factory Pattern (tutoriel détaillé)
sur Comment résoudre le conflit entre la syntaxe Django et Vue
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!