도전
주어진 음이 아닌 정수 n 이 완벽한 제곱 인지 아닌지를 결정하기 위해 2 차 잔류 물 세트를 테이블 조회를 통해 테스트 할 수있는 가장 작은 염기 (예 : 모듈러스)의 덮개를 찾으십시오 . 밑은 모두 최대 값 n의 제곱근보다 작거나 같아야합니다 .
주어진 n 범주에 대해 가장 작은 염기 집합을 가진 답 이 도전에서 이깁니다. (이는 잠재적으로 둘 이상의 승자가있을 수 있음을 의미합니다.) n 의 범주 는 다음과 같습니다.
Category Maximum allowed n Maximum allowed modulus/base
------------- -------------------- ----------------------------
8-bit values 255 15
16-bit values 65535 255
32-bit values 4294967295 65535
64-bit values 18446744073709551615 4294967295
동일한 카디널리티를 갖는 두 세트가있는 넥타이의 경우, 넥타이는 시퀀스의 초기에 비 제곱을 감지하는 능력이 더 큰 세트로 이동합니다.
완전한 커버가 발견되지 않은 경우 (32 비트 및 64 비트 범주에 해당 될 가능성이 높음), 승자는 통계적으로 또는 비 제곱의 비율을 비정규 적으로 가장 많이 배제하는 기준 집합이됩니다 비 제곱으로 제곱을보고). 불완전한 표지에 대한 설명은 아래를 참조하십시오.
배경
많은 수의 이론 응용에서, 어떤 수 n 이 완전한 제곱 인지 아닌지에 대한 의문이 생깁니다 (0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 등). 여부를 테스트하는 한 가지 방법 n이 정사각형이 바닥 (√n가) ² = N, 즉, 둥근 다운의 제곱근 있는지 여부를 테스트하는 것입니다 N 제곱 때, 다시 제공 N . 예를 들어, floor (√123) ² = 11² = 121은 123이 아니므로 123은 정사각형이 아닙니다. 그러나 floor (√121) ² = 11² = 121이므로 121은 정사각형입니다. 이 방법은 특히 하드웨어 제곱근 작업을 사용할 수있는 경우 소수에 적합합니다. 그러나 많은 수 (수백 또는 수천 비트)의 경우 속도가 매우 느릴 수 있습니다.
제곱을 테스트하는 또 다른 방법은 2 차 잔차 테이블을 사용하여 비 제곱을 배제하는 것입니다. 예를 들어 10 진법의 모든 제곱은 0, 1, 4, 5, 6 또는 9 인 최종 (한 자리) 숫자 여야합니다.이 값은 10 진법에 대한 2 차 잔차 세트를 형성합니다. -10 숫자는 0, 1, 4, 5, 6 또는 9로 끝납니다. 정사각형 일 수 있으므로 추가 검사가 필요합니다. 그러나 밑이 10 인 숫자가 2, 3, 7 또는 8로 끝나는 경우 제곱 이 아닌 것을 확신 할 수 있습니다 .
다른 기지를 봅시다. 기수 8의 모든 제곱은 0, 1 또는 4로 끝나야합니다. 편리하게는 8 개 중 3 개의 가능성에 불과합니다. 이는 임의의 숫자가 제곱 일 가능성이 37.5 %이거나 임의의 숫자가 정확히 제곱이 아닐 가능성이 62.5 % 일 가능성을 의미합니다. 베이스 10이 제공하는 것보다 훨씬 좋은 확률입니다. (기본 8 모듈러스 연산은 나머지 10 단위로 나누는 10 진수 모듈과 달리 단순히 논리 연산입니다.)
더 나은 기지가 있습니까? 글쎄, 사실. 기본 120에는 18 % 가능성 (0, 1, 4, 9, 16, 24, 25, 36, 40, 49, 60, 64, 76, 81, 84, 96, 100 및 105)이 있으며 15 % 만 나타냅니다. 정사각형 일 가능성이 있습니다. 그리고 기본 240은 24 개만 가능하지만 정사각형 일 가능성은 10 %에 불과합니다.
그러나 단일 염기만으로는 정사각도를 결정할 수 없습니다 (시험 할 수있는 최대 수보다 크지 않은 경우에는 비현실적 임). 단일 염기만으로는 직각도를 배제 할 수 있습니다 . 직각도를 확실하게 확인할 수 없습니다 . 함께 작동하는 엄선 된 염기 세트 만 정수 범위의 제곱을 결정적으로 확인할 수 있습니다.
따라서 문제는 다음과 같습니다. 어떤베이스가 최소의 커버를 형성하여 함께 제곱 또는 비 제곱의 결정적인 공제를 허용합니까?
정확하지만 최소가 아닌 표지의 예
덮개 16-베이스 덮개 {3, 4, 5, 7, 8, 9, 11, 13, 16, 17, 19, 23, 25, 29, 31, 37}은 직각도 또는 비평 방도를 결정하기에 충분합니다. 16 비트 값은 모두 0 ~ 65535입니다. 그러나 최소한 하나의 15-베이스 커버가 존재하기 때문에 쉽게 찾을 수 있기 때문에 최소한의 커버 는 아닙니다 . 실제로 6 ~ 7 개 정도의베이스로 훨씬 작은 커버가 존재할 가능성이 높습니다.
그러나 설명 을 위해이 16-베이스 커버 세트를 사용하여 샘플 값 n 을 테스트 해 봅시다 . 위의 염기 세트에 대한 2 차 잔류 물 세트는 다음과 같습니다.
Base m Quadratic residue table specific to base m
------ ----------------------------------------------------
3 {0,1}
4 {0,1}
5 {0,1,4}
7 {0,1,2,4}
8 {0,1,4}
9 {0,1,4,7}
11 {0,1,3,4,5,9}
13 {0,1,3,4,9,10,12}
16 {0,1,4,9}
17 {0,1,2,4,8,9,13,15,16}
19 {0,1,4,5,6,7,9,11,16,17}
23 {0,1,2,3,4,6,8,9,12,13,16,18}
25 {0,1,4,6,9,11,14,16,19,21,24}
29 {0,1,4,5,6,7,9,13,16,20,22,23,24,25,28}
31 {0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28}
37 {0,1,3,4,7,9,10,11,12,16,21,25,26,27,28,30,33,34,36}
이제이 베이스 세트를 사용하여 숫자 n = 50401을 각베이스로 변환하여 테스트 해 봅시다 . (이것은 잔류 물을 검사하는 가장 효율적인 방법은 아니지만 설명을하기에 충분합니다.) 여기서 관심이있는 곳은 1입니다 (아래 괄호 안에 표시).
Base "Digits" in base m
m m^9 m^8 m^7 m^6 m^5 m^4 m^3 m^2 m^1 ( m^0 )
---- -----------------------------------------------------------------
3 2 1 2 0 0 1 0 2 0 ( 1 ) ✓
4 3 0 1 0 3 2 0 ( 1 ) ✓
5 3 1 0 3 1 0 ( 1 ) ✓
7 2 6 6 6 4 ( 1 ) ✓
8 1 4 2 3 4 ( 1 ) ✓
9 7 6 1 2 ( 1 ) ✓
11 3 4 9 5 ( 10 )
13 1 9 12 3 ( 0 ) ✓
16 12 4 14 ( 1 ) ✓
17 10 4 6 ( 13 ) ✓
19 7 6 11 ( 13 )
23 4 3 6 ( 8 ) ✓
25 3 5 16 ( 1 ) ✓
29 2 1 26 ( 28 ) ✓
31 1 21 13 ( 26 )
37 36 30 ( 7 ) ✓
따라서이 염기들 중 13 개에서 잔류 물이 알려진 2 차 잔류 물 (표에서 "히트"라고 함)과 일치하고이 염기들 중 3 개에서 잔류 물이 알려진 2 차 잔류 물과 일치하지 않음을 알 수 있습니다. "미스"). 숫자가 정사각형이 아님을 아는 것은 1 미스입니다. 따라서 11시에 멈출 수 있습니다. 그러나 설명을 위해 여기에서는 16 개의 기본을 모두 조사했습니다.
불완전한 표지의 예
기술적으로 불완전한 표지는 표지가 아니라 요점입니다. 기본 집합 {7, 8, 11, 15} 은 0에서 255까지 의 n의 모든 8 비트 값을 거의 정확하게 다루지 만 그다지 정확하지는 않습니다. 특히 60과 240을 정사각형으로 잘못 식별하지만 (거짓 긍정) 실제 모든 정사각형 (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)을 정확하게 식별합니다. 100, 121, 144, 169, 196 및 225) 및 다른 오 탐지를 만들지 않습니다. 따라서 이것은 솔루션으로 거의 성공하지만 불완전한 커버가 유효한 솔루션이 아니기 때문에 결국 실패하는 4 세트입니다.
8 비트 n의 경우 , 염기 세트 {7, 8, 11, 15}는 두 개의 오류를 생성하는 두 개의 4 개 염기 세트 중 하나이며 하나의 오류 만 생성하는 4 개의 염기가 7 개 있습니다. 실제로 8 비트 값을 완전하고 정확하게 커버하는 4 개의베이스 세트는 존재하지 않습니다. 모든 8 비트 값을 올바르게 포함하여 오류를 발생시키지 않는 5 개의 염기 세트를 찾을 수 있습니까? 아니면 6 이상이 필요합니까? (나는 8 비트 n에 대한 답을 알고 있지만 그것을 포기하지는 않을 것이다. 나는 16 비트, 32 비트 또는 64 비트에 대한 답을 모른다. 32 비트 및 64 비트 사례를 해결하려면 유전 적, 휴리스틱 또는 기타 검색 기술이 필요합니다.)
암호로 큰 숫자에 대한 의견
수백 또는 수천 개의 이진수로 된 64 비트 숫자를 넘어 서면, 커버가 불완전하더라도 (사실적으로 큰 숫자 일 것임) 빠른 제곱 검사가 가장 편리합니다. 이와 같은 테스트가 불충분하게 결정된 경우에도 어떻게 유용 할 수 있습니까? 음, 99.9 %의 시간 동안 올바르게 작동하고 나머지 0.1 %의 시간 동안 허위 음수를 제공하고 허위 양성을하지 않은 직각도에 대해 매우 빠른 테스트를 받았다고 상상해보십시오. 이러한 테스트를 통해 거의 직각이 아닌 숫자의 직각도를 파악할 수 있으며 예외적 인 예외적 인 경우에는 다른 방법으로 알 수없는 느린 방법을 사용할 수 있습니다. 이렇게하면 시간을 상당히 절약 할 수 있습니다.
예를 들어, 세트 {8, 11, 13, 15}의 8 비트 값에 대한 시간의 99.61 % 정확 N 0부터 255까지의 16 비트 값에 대한 시간의 95.98 % 정확 N 0 내지 65535, 및 24 비트 값에 대한 시간의 95.62 % 정확 N 0 16777215.로 N 무한대, 염기의 세트에 대한 정확성의 비율이 내려가는하지만 점근 적 접근법과 95.5944 % 아래로 떨어질 때 결코 단정.
따라서이 4 개의 작은베이스로 구성된이 매우 작은 세트조차도 임의로 23 개 중 22 개가 정사각형이 아닌 것으로 거의 즉시 식별하는 데 유용합니다. 더 느린 방법으로 해당 숫자를 추가로 검사 할 필요가 없습니다. 느린 방법은이 빠른 테스트로 배제 할 수없는 적은 비율의 경우에만 적용하면됩니다.
일부 16 비트베이스는 자체적으로 95 % 이상을 달성한다는 점이 흥미 롭습니다. 실제로, 아래의 각 염기는 모든 숫자의 97 % 이상을 정사각형이 아닌 무한대까지 제거 할 수 있습니다. 이러한 각 염기에 대해 2 차 잔차 세트는 8192 바이트 만 사용하여 압축 비트 배열로 표시 될 수 있습니다.
다음은 2 ^ 16보다 적은 10 개의 가장 강력한 단일 기지입니다.
Rank Base Prime factorization Weeds out
---- ------------------------------ ---------
1. 65520 = 2^4 x 3^2 x 5 x 7 x 13 97.95%
2. 55440 = 2^4 x 3^2 x 5 x 7 x 11 97.92%
3. 50400 = 2^5 x 3^2 x 5^2 x 7 97.56%
4. 52416 = 2^6 x 3^2 x 7 x 13 97.44%
5. 61200 = 2^4 x 3^2 x 5^2 x 17 97.41%
6. 44352 = 2^6 x 3^2 x 7 x 11 97.40%
7. 63360 = 2^7 x 3^2 x 5 x 11 97.39%
8. 60480 = 2^6 x 3^3 x 5 x 7 97.38%
9. 63840 = 2^5 x 3 x 5 x 7 x 19 97.37%
10. 54720 = 2^6 x 3^2 x 5 x 19 97.37%
이 기지가 공통점이 있다는 흥미로운 점이 있습니까? 그것들이 함께 조합하여 유용하다고 생각할 이유는 없지만 (아마도 그렇지 않을 수도 있습니다), 더 큰 범주의 숫자에 어떤 기반이 가장 영향력이 있는지에 대한 좋은 단서가 있습니다.
사이드 도전 : 가장 영향력있는 기지 중 하나 (그렇지 않으면 2 ^ 28이 가장)까지 혼자 올바르게 비 사각형의 99.67 %를 걸러, 또는 그것을 던져 307 개 임의의 숫자 306에 대한 수 245,044,800입니다. 당신은 찾을 수 적은 2 ^ 32에 비해 가장 영향력있는 하나의 기반을?
관련
다음 질문에는 밀접하게 관련된 몇 가지 훌륭한 아이디어와 특정 작업을 더 빠르게 수행하기위한 몇 가지 마이크로 최적화 트릭이 있습니다. 링크 된 질문이 가장 강력한베이스 세트를 찾기 위해 구체적으로 제시되지는 않았지만, 강한베이스의 아이디어는 암시 적으로 여기에 사용 된 일부 최적화 기술의 핵심입니다.