Question

('1' * N) !~ /^1?$|^(11+?)\1+$/

Sur le net, j’ai trouvé ce code Ruby qui fonctionne pour N > = 0 et qui détermine si N est un nombre premier. D'après ce que je peux dire, cela ressemble à jouer avec regex mais je n'ai aucune idée de la façon dont cela fonctionne. Quelqu'un pourrait-il me dire comment cela fonctionne?

Était-ce utile?

La solution

Vous pouvez trouver une longue explication de ce code ici: www.noulakaz.net/weblog/2007/03/18/a-expression-tentaire-check-pour-les-nombre-prime/

Autres conseils

Ceci est probablement plutôt hors sujet, mais en Ruby 1.9, vous pouvez le faire:

 require 'mathn'
 38749711234868463.prime?
 => false
require 'prime'

Prime.prime?(4)
# => false

Prime.prime?(5)
# => true

Ou:

require 'prime'

Prime.instance.prime?(4)
# => false

Prime.instance.prime?(5)
# => true

Voir aussi Quelle est la regex la plus brillante que vous avez # 8217 ; ai-je déjà utilisé? (et oui, je peux confirmer que cette expression rationnelle a été écrite à l'origine par Abigail. Je l'ai même entendue expliquer son fonctionnement:)

Le plus grand commun diviseur (gcd):

/^(1+)\1*=\1+$/.match('1' * x + '=' + '1' * y)[1].length

this et is_prime one fonctionnent à peu près de la même manière. Il essaie toutes les combinaisons avant d'abandonner.

Celui-ci essaiera de scinder le premier nombre en parties paires et de faire correspondre le deuxième nombre avec une ou plusieurs de ces parties. S'il trouve une correspondance, il renvoie la longueur de la pièce sélectionnée.

Encore un autre blog avec une assez bonne explication: célèbre Perl One-Liners Explained (Part III)

Si la longueur d'une chaîne de 1 est composite, elle peut être décomposée en plusieurs sous-chaînes identiques, comme 111111 - > 11 11 11

Par exemple, 1111111111 a 10 1 et correspond à (11) {5} ou (11111) {2}, où {2} signifie répété 2 fois. 111111111, a 9 1 et il correspond (111) {3}.

En généralisant le nombre de 1 et le nombre entre {}, l'expression rationnelle est / (1 {2,}) {2,} / . Cependant, 1 {2,} peut également être écrit en 11+, et (...) {2,} en (...) \ 1+, avec des références arrières.

La partie ^ 1? $ de la première alternance recherche les cas 0 et 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top