IT story

이 정규식은 어떻게 소수를 찾습니까?

hot-time 2021. 1. 7. 20:03
반응형

이 정규식은 어떻게 소수를 찾습니까?


중복 가능성 :
정규식에서 숫자가 소수인지 확인하는 방법은 무엇입니까?

이 페이지 는이 정규 표현식이 소수가 아닌 숫자를 발견한다고 주장합니다 (반대로 예 : 소수).

/^1?$|^(11+?)\1+$/

이것은 어떻게 소수를 찾습니까?


기사가 잘 설명하고 있다고 생각하지만 손으로 ​​직접 시도해 보겠습니다.

입력은 단항 형식입니다. 1은 1, 2는 11, 3은 111등입니다. 0은 빈 문자열입니다.

정규식의 첫 번째 부분은 0과 1을 비 프라임으로 일치시킵니다. 두 번째는 마법이 시작되는 곳입니다.

(11+?)제수를 찾는 것으로 시작합니다. 로 정의되는 것으로 시작 11하거나 2 \1는 이전에 캡처 된 일치를 참조하는 변수이므로 \1+숫자가 해당 제수로 나눌 수 있는지 판별합니다. ( 111111에 변수를 할당하여 시작한 11다음 나머지 111111반복됨 을 결정 하므로 6은 2로 나눌 수 있습니다.)

숫자가 2로 나눌 수없는 경우 정규식 엔진은 제수를 증가시킵니다. (11+?)가되고 111다시 시도합니다. 어느 시점에서 정규식이 일치하면 숫자에는 나머지를 산출하지 않는 제수가 있으므로 소수가 될 수 없습니다.


이것이 1 진법 (단항?)의 숫자를위한 것이라는 것을 깨달았습니다.

이 ycombinator 토론에 참여한 몇몇 사람들은 이것을 아주 잘 설명합니다. 사실 그 설명은 내가 얻을 수 있다고 생각하는 것보다 더 간결하므로 링크에 남겨 두겠습니다.

참조 URL : https://stackoverflow.com/questions/3296050/how-does-this-regex-find-primes

반응형