ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Beyond Problem Solving
2022. 09. 29(목)
18:00 ~ 21:00
https://www.acmicpc.net/problem/5615
https://www.acmicpc.net/problem/5615
area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊
읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제
https://www.acmicpc.net/problem/5615
area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊
읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제
area = 2𝑥𝑥 읎멎
짝수만 가능하고
area = 𝑥𝑥y (x > 1, y > 1)읎멎
합성수만 가능하고
https://www.acmicpc.net/problem/5615
area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊
읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제
2 ∗ area + 1 = 2 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊 + 1
2 ∗ 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 + 1읎 소수읞지 판닚하멎 되는 묞제!
2 ∗ area + 1 = 4𝑥𝑥𝑥𝑥 + 2𝑥𝑥 + 2𝑊𝑊 + 1
2 ∗ area + 1 = (2𝑥𝑥 + 1)(2𝑊𝑊 + 1)
https://www.acmicpc.net/problem/5615
def is_prime(n):
i = 5
if n % 2 == 0:
return n == 2
if n % 3 == 0:
return n == 3
while i * i <= n:
if n % i == 0:
return False
i += 2
return n != 1
N = int(sys.stdin.readline())
ans = 0
for i in range(N):
s = int(sys.stdin.readline())
if is_prime(s * 2 + 1):
ans += 1
print(ans)
Python
#include<iostream>
using namespace std;
using llu = unsigned long long;
int is_prime(llu n) {
llu i = 5;
if (n % 2 == 0)
return n == 2;
if (n % 3 == 0)
return n == 3;
while (i * i <= n) {
if (n % i == 0)
return 0;
i += 2;
}
return n != 1;
}
int main() {
llu N;
cin >> N;
llu a = 0;
for (int i = 0; i < N; i++) {
llu s;
cin >> s;
if (is_prime(s * 2 + 1))a++;
}
cout << a << endl;
}
C++
페륎마의 소정늬
p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀.
𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
(≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻)
27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1
p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시
페륎마의 소정늬
p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀.
𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
(≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻)
p가 소수가 아니멎(합성수) 만족할 수도 있고 아닐 수도 있닀!
27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1
p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시
391−1
𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1
(7x13=91)
p륌 합성수읞 91, a륌 p의 배수가 아닌 3로 지정한 예시
8727963568087712425891397479476727340041449 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1
페륎마의 소정늬
p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀.
𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
(≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻)
p가 소수가 아니멎(합성수) 만족할 수도 있고 아닐 수도 있닀!
27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1
p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시
391−1
𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1
(7x13=91)
p륌 합성수읞 91, a륌 p의 배수가 아닌 3로 지정한 예시
8727963568087712425891397479476727340041449 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1
소수 p는 위의 식을 만족한닀. 귞러므로 위 수식을 만족하지 않윌멎 합성수읎닀.
빠륞 거듭제곱 연산
251
= (22)25 ᅵ 2
= (24
)12
ᅵ 22
ᅵ 2
= (28)6 ᅵ 22 ᅵ 2
= (216
)3
ᅵ 22
ᅵ 2
= (232)1 ᅵ 216 ᅵ 22 ᅵ 2
251
륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀.
빠륞 거듭제곱 연산
251
= (22)25 ᅵ 2
= (24
)12
ᅵ 22
ᅵ 2
= (28)6 ᅵ 22 ᅵ 2
= (216
)3
ᅵ 22
ᅵ 2
= (232)1 ᅵ 216 ᅵ 22 ᅵ 2
251
륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀.
지수가 홀수멎 밑을 따로 곱하고 밑은 제곱시킚닀.
= (4)25ᅵ 2
= (16)12
ᅵ (4) ᅵ 2
= (256)6ᅵ (4) ᅵ 2
= (65536)3
ᅵ (4) ᅵ 2
= (4294967296)1ᅵ (65536) ᅵ (4) ᅵ 2
빠륞 거듭제곱 연산
251
= (22)25 ᅵ 2
= (24
)12
ᅵ 22
ᅵ 2
= (28)6 ᅵ 22 ᅵ 2
= (216
)3
ᅵ 22
ᅵ 2
= (232)1 ᅵ 216 ᅵ 22 ᅵ 2
251
륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀.
지수가 홀수멎 밑을 따로 곱하고 밑은 제곱시킚닀.
= (4)25ᅵ 2
= (16)12
ᅵ (4) ᅵ 2
= (256)6ᅵ (4) ᅵ 2
= (65536)3
ᅵ (4) ᅵ 2
= (4294967296)1ᅵ (65536) ᅵ (4) ᅵ 2
def fast_pow(x, y):
ret = 1
while y:
if y % 2 == 1:
ret *= x
y //= 2
x *= x
return ret
Python
using llu = unsigned long long;
llu fast_pow(llu x, llu y) {
llu ret = 1LL;
while (y) {
if (y & 1) {
ret *= x;
}
y /= 2;
x *= x
}
}
C/C++
𝑂𝑂(log 𝑛𝑛)
빠륞 거듭제곱 연산을 활용한 빠륎고 안전한 나뚞지 연산
𝑎𝑎 + 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 + (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐
𝑥𝑥𝑊𝑊
𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧륌 계산하는데 컎퓚터에서 정수 overflow가 발생하므로 아래와 같읎 연산한닀.
가능한 몚든 변수륌 z로 나눈 나뚞지 값을 사용한닀.
def fast_safe_mod(x, y, z):
ret = 1
x %= z
while y:
if y % 2 == 1:
ret = ((ret % z) * (x % z)) % z
y //= 2
x = ((x % z) * (x % z)) % z
return ret
Python
llu fast_safe_mod(llu x, llu y, llu z) {
llu ret = 1LL;
x %= z;
while (y) {
if (y & 1) {
ret = ((ret % z) * (x % z)) % z;
}
y /= 2;
x = ((x % z) * (x % z)) % z;
}
return ret;
}
C/C++
𝑎𝑎 − 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 − (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐
𝑎𝑎 ∗ 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 ∗ (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐
몚듈러 연산의 특징
𝑂𝑂(log 𝑛𝑛)
밀러-띌빈 소수판별 페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠
ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠
ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
% 𝑝𝑝 = 1
(d는 묎조걎 홀수)
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠
ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠
ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
% 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
밀러-띌빈 소수판별
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠
ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠
ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
% 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
⋮
P가 정말 소수띌멎 위의 몚든 식에 대하여 만족핎알 한닀.
밀러-띌빈 소수판별
합동식
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠
ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠
ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
% 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
⋮
P가 정말 소수띌멎 위의 몚든 식에 대하여 만족핎알 한닀.
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
• break 시점
밀러-띌빈 소수판별
합동식
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
⋮
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
• break 시점
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
⋮
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
밀러-띌빈 소수판별
합동식 음반식
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
𝑎𝑎𝑑𝑑
≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
⋮
• break 시점
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
⋮
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때,
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀.
• end 시점
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
밀러-띌빈 소수판별
합동식 음반식
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
• break 시점
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
⋮
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때,
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀.
• end 시점
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
밀러-띌빈 소수판별
𝑟𝑟 = 𝑎𝑎𝑋𝑋
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1
𝑋𝑋 = 𝑝𝑝 − 1
𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜
𝑖𝑖𝑖𝑖 𝑟𝑟 == 1
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑋𝑋 = 𝑋𝑋/2
2𝑆𝑆
ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀.
음반식 의사 윔드
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
• break 시점
𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
⋮
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때,
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀.
• end 시점
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
밀러-띌빈 소수판별
𝑟𝑟 = 𝑎𝑎𝑋𝑋
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1
𝑋𝑋 = 𝑝𝑝 − 1
𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜
𝑖𝑖𝑖𝑖 𝑟𝑟 == 1
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑋𝑋 = 𝑋𝑋/2
2𝑆𝑆
ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀.
음반식 의사 윔드
𝑂𝑂(log 𝑛𝑛)
𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2
𝑛𝑛)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
밀러-띌빈 소수판별
𝑟𝑟 = 𝑎𝑎𝑋𝑋
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1
𝑋𝑋 = 𝑝𝑝 − 1
𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜
𝑖𝑖𝑖𝑖 𝑟𝑟 == 1
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑋𝑋 = 𝑋𝑋/2
2𝑆𝑆
ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀.
의사 윔드
𝑂𝑂(log 𝑛𝑛)
𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2
𝑛𝑛)
• break 시점
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때,
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀.
• end 시점
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
읎제 𝑎𝑎륌 ì–Žë–€ 숫자로 하는지가 ꎀ걎읎닀.
여러가지 𝑎𝑎에 대핎서 테슀튞 한닀.
서로 닀륞 𝑎𝑎륌 k번 테슀튞 하였을 때
합성수가 소수띌고 판별될 확률은
1
4𝑘𝑘 읎닀.
페륎마의 소정늬
𝑎𝑎𝑝𝑝−1
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
𝑎𝑎𝑝𝑝−1
≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝)
p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀.
2𝑠𝑠 ï¿œ 𝑑𝑑
따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1
귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀.
𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀)
• 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1
• −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1
𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀)
합동식에서 우잡항읎 -1 읞것은
음반식에서 우잡항읎 p-1곌 같닀.
밀러-띌빈 소수판별
𝑟𝑟 = 𝑎𝑎𝑋𝑋
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝
𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1
𝑋𝑋 = 𝑝𝑝 − 1
𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜
𝑖𝑖𝑖𝑖 𝑟𝑟 == 1
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝)
𝑋𝑋 = 𝑋𝑋/2
2𝑆𝑆
ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀.
의사 윔드
𝑂𝑂(log 𝑛𝑛)
𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2
𝑛𝑛)
• break 시점
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때,
𝑎𝑎𝑑𝑑
𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀.
• end 시점
계속핎서 룚튞륌 씌워나가는데
만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀.
귞러므로 가능한 몚든 수식을 만족하였윌니
소수 음 수 있닀!
읎제 𝑎𝑎륌 ì–Žë–€ 숫자로 하는지가 ꎀ걎읎닀.
여러가지 𝑎𝑎에 대핎서 테슀튞 한닀.
서로 닀륞 𝑎𝑎륌 k번 테슀튞 하였을 때
합성수가 소수띌고 판별될 확률은
1
4𝑘𝑘 읎닀.
𝑛𝑛 < 341,550,071,728,321음 겜우 𝑎𝑎 = 2,3,5,7,11,13,17에 대핎서만 검사핎볎멎 충분하닀
𝑎𝑎𝑙𝑙𝑙𝑙𝑙𝑙 = [2,7,61]
𝑓𝑓𝑓𝑓𝑓𝑓 𝑎𝑎 𝑖𝑖𝑖𝑖 𝑎𝑎𝑙𝑙𝑙𝑙𝑙𝑙:
𝑖𝑖𝑖𝑖 𝑎𝑎 > 𝑝𝑝
𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
𝑖𝑖𝑖𝑖 𝑝𝑝 < 2
𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓
𝑂𝑂(𝑘𝑘 ï¿œ 𝑙𝑙𝑙𝑙𝑙𝑙2
𝑛𝑛)
𝑛𝑛 < 4,759,123,141음 겜우 𝑎𝑎 = 2,7,61에 대핎서만 검사핎볎멎 충분하닀 .
https://www.acmicpc.net/problem/5615
import sys
def fast_safe_mod(x, y, z):
ret = 1
x %= z
while y:
if y % 2 == 1:
ret = ((ret % z) * (x % z)) % z
y //= 2
x = ((x % z) * (x % z)) % z
return ret
def is_probability_prime(p):
if p < 2:
return False
a = [2, 7, 61]
i = 0
while i < len(a) and a[i] < p:
x = p - 1
while True:
r = fast_safe_mod(a[i], x, p)
if r == p - 1:
break
if x % 2 == 1:
if r == 1:
break
else:
return False
x /= 2
i += 1
return True
N = int(sys.stdin.readline())
ans = 0
for i in range(N):
s = int(sys.stdin.readline())
if is_probability_prime(s * 2 + 1):
ans += 1
print(ans)
Python
#include<iostream>
#include<vector>
using namespace std;
using llu = unsigned long long;
llu fast_safe_mod(llu x, llu y, llu z) {
llu ret = 1LL;
x %= z;
while (y) {
if (y & 1) {
ret = ((ret % z) * (x % z)) % z;
}
y /= 2;
x = ((x % z) * (x % z)) % z;
}
return ret;
}
llu is_probability_prime(llu p) {
if (p < 2) {
return false;
}
vector<llu> a = {2, 7, 61};
llu i = 0;
while (i<a.size() && a[i] < p) {
llu s = p - 1;
while (true) {
llu r = fast_safe_mod(a[i], s, p);
if (r == p - 1) break;
if (s & 1) {
if (r == 1)break;
else return false;
}
s >>= 1;
}
i++;
}
return true;
}
int main() {
llu N;
cin >> N;
llu a = 0;
for (int i = 0; i < N; i++) {
llu s;
cin >> s;
if (is_probability_prime(s * 2 + 1))a++;
}
cout << a << endl;
return 0;
}
C++

More Related Content

Similar to [Miller-Rabin] Detailed explanation of the Miller-Rabin prime number test and slide data on how to implement it (20)

SVM
SVMSVM
SVM
Jeonghun Yoon
Ìý
선형대수 11강 벡터 투영곌 최소제곱법
선형대수 11강 벡터 투영곌 최소제곱법선형대수 11강 벡터 투영곌 최소제곱법
선형대수 11강 벡터 투영곌 최소제곱법
AHRA CHO
Ìý
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagation
JinSooKim80
Ìý
[Ʞ쎈수학] 믞분 적분학
[Ʞ쎈수학] 믞분 적분학[Ʞ쎈수학] 믞분 적분학
[Ʞ쎈수학] 믞분 적분학
KyeongWon Koo
Ìý
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
강믌국 강믌국
Ìý
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomization
Changki Yun
Ìý
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
Changki Yun
Ìý
Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
Young-Min kang
Ìý
Chapter 19 Variational Inference
Chapter 19 Variational InferenceChapter 19 Variational Inference
Chapter 19 Variational Inference
KyeongUkJang
Ìý
선형대수 06. 영벡터공간곌 핎집합
선형대수 06. 영벡터공간곌 핎집합선형대수 06. 영벡터공간곌 핎집합
선형대수 06. 영벡터공간곌 핎집합
AHRA CHO
Ìý
0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation
Jeonghun Yoon
Ìý
Vae
VaeVae
Vae
Lee Gyeong Hoon
Ìý
Linear regression
Linear regressionLinear regression
Linear regression
전 희천
Ìý
선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)
AHRA CHO
Ìý
Multinomial classification and application of ML
Multinomial classification and application of MLMultinomial classification and application of ML
Multinomial classification and application of ML
희수 박
Ìý
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
AHRA CHO
Ìý
0207 1 gradient
0207 1 gradient0207 1 gradient
0207 1 gradient
Jeonghun Yoon
Ìý
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNN
SANG WON PARK
Ìý
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
sung ki choi
Ìý
[프선대]Chap02 랭크 역행렬-음찚방정식
[프선대]Chap02 랭크 역행렬-음찚방정식[프선대]Chap02 랭크 역행렬-음찚방정식
[프선대]Chap02 랭크 역행렬-음찚방정식
종현 최
Ìý
선형대수 11강 벡터 투영곌 최소제곱법
선형대수 11강 벡터 투영곌 최소제곱법선형대수 11강 벡터 투영곌 최소제곱법
선형대수 11강 벡터 투영곌 최소제곱법
AHRA CHO
Ìý
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagation
JinSooKim80
Ìý
[Ʞ쎈수학] 믞분 적분학
[Ʞ쎈수학] 믞분 적분학[Ʞ쎈수학] 믞분 적분학
[Ʞ쎈수학] 믞분 적분학
KyeongWon Koo
Ìý
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomization
Changki Yun
Ìý
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
R.R.E.F.U (Uniqueness of Reduced Row Echelon Form)
Changki Yun
Ìý
Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
Young-Min kang
Ìý
Chapter 19 Variational Inference
Chapter 19 Variational InferenceChapter 19 Variational Inference
Chapter 19 Variational Inference
KyeongUkJang
Ìý
선형대수 06. 영벡터공간곌 핎집합
선형대수 06. 영벡터공간곌 핎집합선형대수 06. 영벡터공간곌 핎집합
선형대수 06. 영벡터공간곌 핎집합
AHRA CHO
Ìý
0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation0131 1 spectral_theorem_transformation
0131 1 spectral_theorem_transformation
Jeonghun Yoon
Ìý
선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)선형대수 08. 선형 변환 (Linear Transformation)
선형대수 08. 선형 변환 (Linear Transformation)
AHRA CHO
Ìý
Multinomial classification and application of ML
Multinomial classification and application of MLMultinomial classification and application of ML
Multinomial classification and application of ML
희수 박
Ìý
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
선형대수 01. 선형성의 정의와 1ì°š 연늜방정식의 의믞
AHRA CHO
Ìý
0207 1 gradient
0207 1 gradient0207 1 gradient
0207 1 gradient
Jeonghun Yoon
Ìý
Code로 이해하는 RNN
Code로 이해하는 RNNCode로 이해하는 RNN
Code로 이해하는 RNN
SANG WON PARK
Ìý
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
[아꿈사] 게임 Ʞ쎈 수학 묌늬 1,2장
sung ki choi
Ìý
[프선대]Chap02 랭크 역행렬-음찚방정식
[프선대]Chap02 랭크 역행렬-음찚방정식[프선대]Chap02 랭크 역행렬-음찚방정식
[프선대]Chap02 랭크 역행렬-음찚방정식
종현 최
Ìý

More from Bomm Kim (6)

ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slideML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
Bomm Kim
Ìý
[UNET]Segmentation model, a representative UNet, and a slide for understanding
[UNET]Segmentation model, a representative UNet, and a slide for understanding[UNET]Segmentation model, a representative UNet, and a slide for understanding
[UNET]Segmentation model, a representative UNet, and a slide for understanding
Bomm Kim
Ìý
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
Bomm Kim
Ìý
SegmentTree Datastructure description and implementation slides
SegmentTree Datastructure description and implementation slidesSegmentTree Datastructure description and implementation slides
SegmentTree Datastructure description and implementation slides
Bomm Kim
Ìý
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) AlgorithmBOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
Bomm Kim
Ìý
BOJ4743_ConvexHull,Polygon Algorithm and C++ code
BOJ4743_ConvexHull,Polygon Algorithm and C++ codeBOJ4743_ConvexHull,Polygon Algorithm and C++ code
BOJ4743_ConvexHull,Polygon Algorithm and C++ code
Bomm Kim
Ìý
ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slideML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
ML(KNN, Decision Tree), DL(RCNN, YOLO) educational slide
Bomm Kim
Ìý
[UNET]Segmentation model, a representative UNet, and a slide for understanding
[UNET]Segmentation model, a representative UNet, and a slide for understanding[UNET]Segmentation model, a representative UNet, and a slide for understanding
[UNET]Segmentation model, a representative UNet, and a slide for understanding
Bomm Kim
Ìý
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
[FreivaldsAlgorithm]The Freivalds Algorithm is an algorithm that determines w...
Bomm Kim
Ìý
SegmentTree Datastructure description and implementation slides
SegmentTree Datastructure description and implementation slidesSegmentTree Datastructure description and implementation slides
SegmentTree Datastructure description and implementation slides
Bomm Kim
Ìý
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) AlgorithmBOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
BOJ10547_STUDENTSKO_LIS(Longest Increasing Subsequence) Algorithm
Bomm Kim
Ìý
BOJ4743_ConvexHull,Polygon Algorithm and C++ code
BOJ4743_ConvexHull,Polygon Algorithm and C++ codeBOJ4743_ConvexHull,Polygon Algorithm and C++ code
BOJ4743_ConvexHull,Polygon Algorithm and C++ code
Bomm Kim
Ìý

[Miller-Rabin] Detailed explanation of the Miller-Rabin prime number test and slide data on how to implement it

  • 1. Beyond Problem Solving 2022. 09. 29(목) 18:00 ~ 21:00
  • 3. https://www.acmicpc.net/problem/5615 area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊 읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제
  • 4. https://www.acmicpc.net/problem/5615 area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊 읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제 area = 2𝑥𝑥 읎멎 짝수만 가능하고 area = 𝑥𝑥y (x > 1, y > 1)읎멎 합성수만 가능하고
  • 5. https://www.acmicpc.net/problem/5615 area = 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊 읞데 ì–Žë–€ x,y에 대핎서 나올 수 없는 area륌 판별하는 묞제 2 ∗ area + 1 = 2 2𝑥𝑥𝑥𝑥 + 𝑥𝑥 + 𝑊𝑊 + 1 2 ∗ 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 + 1읎 소수읞지 판닚하멎 되는 묞제! 2 ∗ area + 1 = 4𝑥𝑥𝑥𝑥 + 2𝑥𝑥 + 2𝑊𝑊 + 1 2 ∗ area + 1 = (2𝑥𝑥 + 1)(2𝑊𝑊 + 1)
  • 6. https://www.acmicpc.net/problem/5615 def is_prime(n): i = 5 if n % 2 == 0: return n == 2 if n % 3 == 0: return n == 3 while i * i <= n: if n % i == 0: return False i += 2 return n != 1 N = int(sys.stdin.readline()) ans = 0 for i in range(N): s = int(sys.stdin.readline()) if is_prime(s * 2 + 1): ans += 1 print(ans) Python #include<iostream> using namespace std; using llu = unsigned long long; int is_prime(llu n) { llu i = 5; if (n % 2 == 0) return n == 2; if (n % 3 == 0) return n == 3; while (i * i <= n) { if (n % i == 0) return 0; i += 2; } return n != 1; } int main() { llu N; cin >> N; llu a = 0; for (int i = 0; i < N; i++) { llu s; cin >> s; if (is_prime(s * 2 + 1))a++; } cout << a << endl; } C++
  • 7. 페륎마의 소정늬 p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀. 𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 (≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻) 27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1 p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시
  • 8. 페륎마의 소정늬 p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀. 𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 (≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻) p가 소수가 아니멎(합성수) 만족할 수도 있고 아닐 수도 있닀! 27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1 p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시 391−1 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1 (7x13=91) p륌 합성수읞 91, a륌 p의 배수가 아닌 3로 지정한 예시 8727963568087712425891397479476727340041449 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1
  • 9. 페륎마의 소정늬 p가 소수읎고 a가 p의 배수가 아니멎 아래의 수식을 만족한닀. 𝑎𝑎𝑝𝑝−1𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 (≡는 합동윌로 양변을 p로 나눈 나뚞지가 같닀는 뜻) p가 소수가 아니멎(합성수) 만족할 수도 있고 아닐 수도 있닀! 27−1 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 26 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 128 𝑚𝑚𝑚𝑚𝑚𝑚 7 = 1 p륌 소수읞 7, a륌 p의 배수가 아닌 2로 지정한 예시 391−1 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1 (7x13=91) p륌 합성수읞 91, a륌 p의 배수가 아닌 3로 지정한 예시 8727963568087712425891397479476727340041449 𝑚𝑚𝑚𝑚𝑚𝑚 91 = 1 소수 p는 위의 식을 만족한닀. 귞러므로 위 수식을 만족하지 않윌멎 합성수읎닀.
  • 10. 빠륞 거듭제곱 연산 251 = (22)25 ï¿œ 2 = (24 )12 ï¿œ 22 ï¿œ 2 = (28)6 ï¿œ 22 ï¿œ 2 = (216 )3 ï¿œ 22 ï¿œ 2 = (232)1 ï¿œ 216 ï¿œ 22 ï¿œ 2 251 륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀.
  • 11. 빠륞 거듭제곱 연산 251 = (22)25 ï¿œ 2 = (24 )12 ï¿œ 22 ï¿œ 2 = (28)6 ï¿œ 22 ï¿œ 2 = (216 )3 ï¿œ 22 ï¿œ 2 = (232)1 ï¿œ 216 ï¿œ 22 ï¿œ 2 251 륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀. 지수가 홀수멎 밑을 따로 곱하고 밑은 제곱시킚닀. = (4)25ï¿œ 2 = (16)12 ï¿œ (4) ï¿œ 2 = (256)6ï¿œ (4) ï¿œ 2 = (65536)3 ï¿œ (4) ï¿œ 2 = (4294967296)1ï¿œ (65536) ï¿œ (4) ï¿œ 2
  • 12. 빠륞 거듭제곱 연산 251 = (22)25 ï¿œ 2 = (24 )12 ï¿œ 22 ï¿œ 2 = (28)6 ï¿œ 22 ï¿œ 2 = (216 )3 ï¿œ 22 ï¿œ 2 = (232)1 ï¿œ 216 ï¿œ 22 ï¿œ 2 251 륌 계산하는데 있얎 2륌 51번 곱할 필요는 없닀. 지수가 홀수멎 밑을 따로 곱하고 밑은 제곱시킚닀. = (4)25ï¿œ 2 = (16)12 ï¿œ (4) ï¿œ 2 = (256)6ï¿œ (4) ï¿œ 2 = (65536)3 ï¿œ (4) ï¿œ 2 = (4294967296)1ï¿œ (65536) ï¿œ (4) ï¿œ 2 def fast_pow(x, y): ret = 1 while y: if y % 2 == 1: ret *= x y //= 2 x *= x return ret Python using llu = unsigned long long; llu fast_pow(llu x, llu y) { llu ret = 1LL; while (y) { if (y & 1) { ret *= x; } y /= 2; x *= x } } C/C++ 𝑂𝑂(log 𝑛𝑛)
  • 13. 빠륞 거듭제곱 연산을 활용한 빠륎고 안전한 나뚞지 연산 𝑎𝑎 + 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 + (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 𝑥𝑥𝑊𝑊 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧륌 계산하는데 컎퓚터에서 정수 overflow가 발생하므로 아래와 같읎 연산한닀. 가능한 몚든 변수륌 z로 나눈 나뚞지 값을 사용한닀. def fast_safe_mod(x, y, z): ret = 1 x %= z while y: if y % 2 == 1: ret = ((ret % z) * (x % z)) % z y //= 2 x = ((x % z) * (x % z)) % z return ret Python llu fast_safe_mod(llu x, llu y, llu z) { llu ret = 1LL; x %= z; while (y) { if (y & 1) { ret = ((ret % z) * (x % z)) % z; } y /= 2; x = ((x % z) * (x % z)) % z; } return ret; } C/C++ 𝑎𝑎 − 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 − (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 𝑎𝑎 ∗ 𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 = ( 𝑎𝑎 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 ∗ (𝑏𝑏 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐)) 𝑚𝑚𝑚𝑚𝑚𝑚 𝑐𝑐 몚듈러 연산의 특징 𝑂𝑂(log 𝑛𝑛)
  • 14. 밀러-띌빈 소수판별 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 (d는 묎조걎 홀수)
  • 15. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) 밀러-띌빈 소수판별
  • 16. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) ⋮ P가 정말 소수띌멎 위의 몚든 식에 대하여 만족핎알 한닀. 밀러-띌빈 소수판별 합동식
  • 17. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) ⋮ P가 정말 소수띌멎 위의 몚든 식에 대하여 만족핎알 한닀. 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! • break 시점 밀러-띌빈 소수판별 합동식
  • 18. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) ⋮ 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! • break 시점 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 ⋮ 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀. 밀러-띌빈 소수판별 합동식 음반식
  • 19. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) ⋮ • break 시점 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 ⋮ 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀. 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때, 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀. • end 시점 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! 밀러-띌빈 소수판별 합동식 음반식
  • 20. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) • break 시점 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 ⋮ 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀. 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때, 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀. • end 시점 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! 밀러-띌빈 소수판별 𝑟𝑟 = 𝑎𝑎𝑋𝑋 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1 𝑋𝑋 = 𝑝𝑝 − 1 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 𝑟𝑟 == 1 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑋𝑋 = 𝑋𝑋/2 2𝑆𝑆 ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀. 음반식 의사 윔드
  • 21. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) • break 시점 𝑎𝑎2𝑠𝑠−2ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−3ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−4ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = ±1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 ⋮ 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때, 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀. • end 시점 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! 밀러-띌빈 소수판별 𝑟𝑟 = 𝑎𝑎𝑋𝑋 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1 𝑋𝑋 = 𝑝𝑝 − 1 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 𝑟𝑟 == 1 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑋𝑋 = 𝑋𝑋/2 2𝑆𝑆 ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀. 음반식 의사 윔드 𝑂𝑂(log 𝑛𝑛) 𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2 𝑛𝑛) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀.
  • 22. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀. 밀러-띌빈 소수판별 𝑟𝑟 = 𝑎𝑎𝑋𝑋 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1 𝑋𝑋 = 𝑝𝑝 − 1 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 𝑟𝑟 == 1 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑋𝑋 = 𝑋𝑋/2 2𝑆𝑆 ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀. 의사 윔드 𝑂𝑂(log 𝑛𝑛) 𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2 𝑛𝑛) • break 시점 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때, 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀. • end 시점 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! 읎제 𝑎𝑎륌 ì–Žë–€ 숫자로 하는지가 ꎀ걎읎닀. 여러가지 𝑎𝑎에 대핎서 테슀튞 한닀. 서로 닀륞 𝑎𝑎륌 k번 테슀튞 하였을 때 합성수가 소수띌고 판별될 확률은 1 4𝑘𝑘 읎닀.
  • 23. 페륎마의 소정늬 𝑎𝑎𝑝𝑝−1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎𝑝𝑝−1 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) p가 홀수읞 소수띌멎 p-1은 짝수읎고 몚든 짝수는 닀음곌 같읎 표현할 수 있닀. 2𝑠𝑠 ï¿œ 𝑑𝑑 따띌서, 𝑝𝑝 − 1을 2𝑠𝑠 ï¿œ 𝑑𝑑 로 치환할 수 있닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ 1 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 % 𝑝𝑝 = 1 귞러므로 p가 소수읎멎 위 수식을 얎떻게 변형핎도 만족핎알 한닀. 𝑎𝑎2𝑠𝑠ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (양변에 룚튞륌 씌워도 식을 만족핎알 한닀) • 1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 1 • −1 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 = 𝑝𝑝 − 1 𝑎𝑎2𝑠𝑠−1ᅵ𝑑𝑑 ≡ ±12 (𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝) (좌잡항은 왌쪜곌 같읎 표현할 수 있닀) 합동식에서 우잡항읎 -1 읞것은 음반식에서 우잡항읎 p-1곌 같닀. 밀러-띌빈 소수판별 𝑟𝑟 = 𝑎𝑎𝑋𝑋 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 𝑖𝑖𝑖𝑖 𝑟𝑟 == 𝑝𝑝 − 1 𝑋𝑋 = 𝑝𝑝 − 1 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑖𝑖𝑖𝑖 𝑋𝑋 𝑖𝑖𝑖𝑖 𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 𝑟𝑟 == 1 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 (𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 (𝑛𝑛𝑛𝑛𝑛𝑛 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) 𝑋𝑋 = 𝑋𝑋/2 2𝑆𝑆 ï¿œ 𝑑𝑑 륌 𝑋𝑋띌 한닀. 의사 윔드 𝑂𝑂(log 𝑛𝑛) 𝑂𝑂(𝑙𝑙𝑙𝑙𝑙𝑙2 𝑛𝑛) • break 시점 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝 슉, 지수항읎 홀수가 되얎 d만 낚게되었을 때, 𝑎𝑎𝑑𝑑 𝑚𝑚𝑚𝑚𝑚𝑚 𝑝𝑝가 1읎멎 소수음 수 있고, 귞렇지 않윌멎 묎조걎 합성수읎닀. • end 시점 계속핎서 룚튞륌 씌워나가는데 만앜 우잡항읎 -1읎멎 더 읎상 룚튞륌 씌욞 수 없닀. 귞러므로 가능한 몚든 수식을 만족하였윌니 소수 음 수 있닀! 읎제 𝑎𝑎륌 ì–Žë–€ 숫자로 하는지가 ꎀ걎읎닀. 여러가지 𝑎𝑎에 대핎서 테슀튞 한닀. 서로 닀륞 𝑎𝑎륌 k번 테슀튞 하였을 때 합성수가 소수띌고 판별될 확률은 1 4𝑘𝑘 읎닀. 𝑛𝑛 < 341,550,071,728,321음 겜우 𝑎𝑎 = 2,3,5,7,11,13,17에 대핎서만 검사핎볎멎 충분하닀 𝑎𝑎𝑙𝑙𝑙𝑙𝑙𝑙 = [2,7,61] 𝑓𝑓𝑓𝑓𝑓𝑓 𝑎𝑎 𝑖𝑖𝑖𝑖 𝑎𝑎𝑙𝑙𝑙𝑙𝑙𝑙: 𝑖𝑖𝑖𝑖 𝑎𝑎 > 𝑝𝑝 𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏𝑏 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑖𝑖𝑖𝑖 𝑝𝑝 < 2 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 𝑂𝑂(𝑘𝑘 ï¿œ 𝑙𝑙𝑙𝑙𝑙𝑙2 𝑛𝑛) 𝑛𝑛 < 4,759,123,141음 겜우 𝑎𝑎 = 2,7,61에 대핎서만 검사핎볎멎 충분하닀 .
  • 24. https://www.acmicpc.net/problem/5615 import sys def fast_safe_mod(x, y, z): ret = 1 x %= z while y: if y % 2 == 1: ret = ((ret % z) * (x % z)) % z y //= 2 x = ((x % z) * (x % z)) % z return ret def is_probability_prime(p): if p < 2: return False a = [2, 7, 61] i = 0 while i < len(a) and a[i] < p: x = p - 1 while True: r = fast_safe_mod(a[i], x, p) if r == p - 1: break if x % 2 == 1: if r == 1: break else: return False x /= 2 i += 1 return True N = int(sys.stdin.readline()) ans = 0 for i in range(N): s = int(sys.stdin.readline()) if is_probability_prime(s * 2 + 1): ans += 1 print(ans) Python #include<iostream> #include<vector> using namespace std; using llu = unsigned long long; llu fast_safe_mod(llu x, llu y, llu z) { llu ret = 1LL; x %= z; while (y) { if (y & 1) { ret = ((ret % z) * (x % z)) % z; } y /= 2; x = ((x % z) * (x % z)) % z; } return ret; } llu is_probability_prime(llu p) { if (p < 2) { return false; } vector<llu> a = {2, 7, 61}; llu i = 0; while (i<a.size() && a[i] < p) { llu s = p - 1; while (true) { llu r = fast_safe_mod(a[i], s, p); if (r == p - 1) break; if (s & 1) { if (r == 1)break; else return false; } s >>= 1; } i++; } return true; } int main() { llu N; cin >> N; llu a = 0; for (int i = 0; i < N; i++) { llu s; cin >> s; if (is_probability_prime(s * 2 + 1))a++; } cout << a << endl; return 0; } C++