페르마 소인수분해Permalink

인수분해 하려는 홀수 nn에 대해, n=x2y2n=x^2-y^2 를 만족하는 수 x,yx,y를 찾는 것은 인수분해를 하는것과 동치이다.

짝수라면 22로 계속 소거해간다.

n=(x+y)(xy) \because n=(x+y)(x-y)

만약 n=ab(1ba)n=ab(1 \le b \le a) 라면,

n=ab=(a+b2)2(ab2)2 \begin{aligned} n&=ab\\ &=\Bigl(\dfrac {a+b}2\Bigr)^2-\Bigl(\dfrac {a-b}2\Bigr)^2 \end{aligned}

로 역도 성립한다.

이 때, nn이 홀수이므로 a,ba, b 모두 홀수이다.


n=x2y2n=x^2-y^2 를 찾는 과정은 x2n=y2x^2-n=y^2 꼴을 찾는 과정이다.

k2nk^2 \ge nkk 부터 kk11씩 늘려가며 k2nk^2-n 이 완전제곱수가 되는 경우를 찾는다.

k2n(k+1)2n(k+2)2n \begin{gathered} k^2-n \\ (k+1)^2-n \\ (k+2)^2-n \\ \vdots \end{gathered}

이는 인수를 찾지 못하면 궁극적으로 (n+12)2n=(n12)2\left( \dfrac {n+1}2 \right)^2-n=\left( \dfrac {n-1}2 \right)^2 에 도달하고,

인수 n,1n, 1 을 찾아내고 종료된다. 이 경우 nn은 소수이다.

페르마 소인수분해 일반화Permalink

n=x2y2n=x^2-y^2 꼴에서 x2y2x^2-y^2nn의 배수가 되는 x,yx, y를 조사한다. 즉,

x2y2(modn) x^2 \equiv y^2 \pmod n

d=gcd(xy,n)d=gcd(x-y,n) 혹은 d=gcd(x+y,n)d=gcd(x+y,n) 이라 하자.

ddnn의 약수지만, 1<d<n1 < d < n 을 만족하는 진약수인지가 관건이다.

nn이 두 소수 p,qp,q의 곱일 때, d{1,p,q,pq}d \in \{1,p,q,pq\}

x2y2(modn)pq(x+y)(xy) \begin{matrix} x^2 \equiv y^2 \pmod n\\ \Downarrow\\ pq \mid (x+y)(x-y) \end{matrix}

유클리드 보조정리에 의해 ppqq는 각각 (x+y),(xy)(x+y), (x-y) 중 하나를 나눈다.

px+y, qx+yp \mid x+y,~q \mid x+y 이면 nx+yn \mid x + y 이다.

그럼 x+y0(modn)x+y \equiv 0 \pmod n 이 되어서 d=gcd(x+y,n)=nd=gcd(x+y,n)=n 이 되어서 1<d<n1 < d < n 을 만족하는 진약수를 찾을 수 없다.

pxy, qxyp \mid x-y,~q \mid x-y이면 유사하게 dd 가 진약수가 되지 못한다.

결국 ppqq가 각각 x+y,xyx+y, x-y 를 하나씩 나누는 경우만 ddnn의 진약수가 된다.

이 때의 ddd=pd=p 혹은 d=qd=q 이다.

정리하자면, x2y2(modn)x^2 \equiv y^2 \pmod n 인 정수 x,yx, y 를 찾으면 gcd(x+y,n)gcd(x+y,n)gcd(xy,n)gcd(x-y,n)nn의 진약수가 되어 인수분해를 진행할 수 있다.

이를 만족하는 xxyy를 찾는 방법은 21892189의 배수에 가까운 제곱수를 조사하면서 대충 뒤져보는 것인데, 그래서 문제를 풀 땐 폴라드 로 소인수분해 같은것과 비교하면 별 쓸모가 없다.

nn이 세개 이상의 소인수를 가질 땐, 위와 같은 방법으로 찾은 ddnn의 진약수라는 보장이 없다.

그래서 PS에선 쓸모없다.

크렡칙 소인수분해Permalink

생략

이 또한 PS에는 쓰이지 않는다.

Comments