이 정규식은 어떻게 소수를 찾습니까?
중복 가능성 :
정규식에서 숫자가 소수인지 확인하는 방법은 무엇입니까?
이 페이지 는이 정규 표현식이 소수가 아닌 숫자를 발견한다고 주장합니다 (반대로 예 : 소수).
/^1?$|^(11+?)\1+$/
이것은 어떻게 소수를 찾습니까?
기사가 잘 설명하고 있다고 생각하지만 손으로 직접 시도해 보겠습니다.
입력은 단항 형식입니다. 1은 1
, 2는 11
, 3은 111
등입니다. 0은 빈 문자열입니다.
정규식의 첫 번째 부분은 0과 1을 비 프라임으로 일치시킵니다. 두 번째는 마법이 시작되는 곳입니다.
(11+?)
제수를 찾는 것으로 시작합니다. 로 정의되는 것으로 시작 11
하거나 2 \1
는 이전에 캡처 된 일치를 참조하는 변수이므로 \1+
숫자가 해당 제수로 나눌 수 있는지 판별합니다. ( 111111
에 변수를 할당하여 시작한 11
다음 나머지 1111
가 11
반복됨 을 결정 하므로 6은 2로 나눌 수 있습니다.)
숫자가 2로 나눌 수없는 경우 정규식 엔진은 제수를 증가시킵니다. (11+?)
가되고 111
다시 시도합니다. 어느 시점에서 정규식이 일치하면 숫자에는 나머지를 산출하지 않는 제수가 있으므로 소수가 될 수 없습니다.
이것이 1 진법 (단항?)의 숫자를위한 것이라는 것을 깨달았습니다.
이 ycombinator 토론에 참여한 몇몇 사람들은 이것을 아주 잘 설명합니다. 사실 그 설명은 내가 얻을 수 있다고 생각하는 것보다 더 간결하므로 링크에 남겨 두겠습니다.
참조 URL : https://stackoverflow.com/questions/3296050/how-does-this-regex-find-primes
'IT story' 카테고리의 다른 글
Google Analytics-한 페이지에 여러 추적기 (쿠키 충돌) (0) | 2021.01.07 |
---|---|
한 Git 저장소를 다른 저장소로 리베이스하는 방법은 무엇입니까? (0) | 2021.01.07 |
Visual Studio 디버거에서 하나의 프로세스 분리 (0) | 2021.01.07 |
Apt-Get 설치 설치의 Jenkins 사용자 (0) | 2021.01.07 |
jQuery Mobile이 동적으로 삽입 된 콘텐츠의 스타일 / 테마를 재평가하도록 강제 (0) | 2021.01.07 |