Frage

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

Im Netz fand ich dieses Stück von Ruby-Code, der für N> = 0, das funktioniert bestimmt, ob oder nicht N eine Primzahl ist. Von dem, was ich sagen kann, es sieht aus wie ein Spiel mit regex, aber ich habe keine Ahnung, wie es funktioniert. Könnte mir jemand sagen, wie es funktioniert?

War es hilfreich?

Lösung

Sie können eine lange Erklärung dieser Code finden Sie hier: http: // www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/

Andere Tipps

Dies ist wahrscheinlich eher vom Thema, aber in Ruby 1.9, Sie können dies tun:

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

Prime.prime?(4)
# => false

Prime.prime?(5)
# => true

Oder:

require 'prime'

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

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

Siehe auch Was ist das brillanteste regex Sie haben ? je benutzen (. und ja, kann ich bestätigen, dass dieser regexp ursprünglich von Abigail geschrieben ich habe sogar gehört, sie erklären, wie es funktioniert:)

Größter gemeinsamer Teiler (GCD):

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

Dies und die is_prime arbeitet man etwa die gleiche Art und Weise in. Es wird versucht, alle Kombinationen, bevor er aufgibt.

Dieser wird versuchen, die erste Zahl in sogar Teile aufzuspalten, und mit einem oder mehreren dieser Teile die zweite Zahl entsprechen. Wenn es eine Übereinstimmung findet gibt es die Länge des ausgewählten Teils.

Noch ein weiterer Blog mit einer ziemlich guten Erklärung: Famous Perl Einzeiler erklärt (Teil III)

Wenn die Länge einer Kette von 1 Composite ist, dann kann die Zeichenfolge in mehrere identischen Teil zerlegt wird, wie 111111 -> 11 11 11

Beispiel: 1111111111, hat 10 1en und sie paßt (11)} oder {5 (11111) {2}, wobei {2} bedeutet 2-mal wiederholt. 111111111, hat 9 1'en, und sie paßt (111) {3}.

Durch die Anzahl der 1en verallgemeinern und die Zahl in {}, die regexp /(1{2,}){2,}/. Allerdings 1 {2,} kann auch als 11+ geschrieben werden, und (...) {2,} kann wie folgt umgeschrieben werden (...) \ 1+, mit Rückreferenzierungen.

Der ^1?$ Teil in den ersten Wechsel Kontrollen für 0 und 1-Fälle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top