디오판투스 방정식
이름이 거창해보이지만 내용은 정수 계수 부정 방정식이다.
예를 들면 3x+2y=5 이런 것이다.
지난시간에 ax+by=c가 정수 해를 가지려면 gcd(a,b)|c를 만족해야 한다고 했다.
이를 이용하여 다양한 작업을 해보자.
>> Theorem)
소수 p에 대해서 p|ab 이면 p|a이거나 p|b이다.
proof
case 1) p|a
자명히 성립한다.
case 2) p∤a
p는 소수이므로 gcd(a,p)=1
그럼 유클리드 알고리즘에 의해 ax+py=1(=gcd(a,p))를 만들 수 있다.
위 식은 해를 가지고 양변에 b를 곱하면 abx+bpy=b가 된다.
p|abx이고 p|bpy이기 때문에 좌변은 p로 나누어 떨어진다.
우변도 p로 나누어 떨어져야 하기 때문에 p|b가 된다. ◻
위 이론을 Prime Divisor Property라고 한다.
일반적인 상황에서 디오판투스 방정식을 풀어보자.
ax+by=gcd(a,b)는 지난시간 유클리드 알고리즘을 역연산해서 해결할 수 있었다.
ax+by=c도 해결해보자.
우선 gcd(a,b)|c는 반드시 성립해야 한다.
그리고 서로소가 되도록 a,b,c를 모두 gcd(a,b)로 나누고 시작한다.
ax0+by0=gcd(a,b)를 만족하는 (x0,y0)이 있다고 하자. (유클리드 알고리즘으로 구할 수 있다.)
c=dgcd(a,b)라고 하면 해결할 방정식을 adx0+bdy0=dgcd(a,b)로 나타낼 수 있고 x=dx0,y=dy0으로 두면 충분하다.
여기서 더 나아가서 일반해까지 구해보려고 한다.
위에서 구한 해를 x1=dx0,y1=dy0으로 두자.
ax+by=c, ax1+by1=c가 있고 두 방정식을 각각 빼면 a(x−x1)+b(y−y1)=0이고 a(x−x1)=−b(y−y1)이 된다.
위에서 a,b를 서로소로 만들었으므로 a|y−y1,b|x−x1을 만족해야 한다. (prime divisor property)
u|v는 v=ku(k∈Z)라는 뜻과 같다.
따라서 y−y1=ka→y=ka+y1, x=kb+x1 (k∈Z)이 일반해가 된다.
처음에 a,b를 gcd(a,b)로 나누고 시작했으므로 여기서 다시 곱해주면 된다.
숭고한 알고리즘 contest에서 이 내용을 사용해서 문제를 해결할 수 있었다.
https://www.acmicpc.net/problem/24892
24892번: 이차 함수
다각형 넓이의 최댓값이 pq(p와 q는 서로소인 자연수)일 때, q⋅v≡p(mod1000000007)이 되는 0이상 1000000006 이하의 정수 v를 출력한다. 모든 입력에 대해 이
www.acmicpc.net
정해는 모듈러 역원을 사용하는 것이지만 디오판투스 방정식을 확장 유클리드 알고리즘으로 해결함으로써 답을 구할 수 있었다.
우선 어떻게 해서든 p,q를 서로소인 정수꼴로 나타낸다. (나는 사다리꼴 공식을 사용했다.)
구하고자 하는것이 qv≡pmod1000000007이므로 qv=1000000007k+p(k∈Z)로 나타낼 수 있다.
식을 변형하면 qv−1000000007k=p인 디오판투스 방정식이 되고 p,q는 구해놨으니 방정식을 풀어서 v,k를 구하면 된다.
1000000007은 소수이고 문제에서 0≤v<1000000007이라고 했으므로 gcd(v,1000000007)=1이고 방정식의 정수해는 반드시 존재한다.
'수학 > 정수론' 카테고리의 다른 글
[정수론] 6. 중국인의 나머지 정리 (1) | 2022.04.21 |
---|---|
[정수론] 5. 고차 합동 방정식 (0) | 2022.04.20 |
[정수론] 4. 합동 (0) | 2022.04.17 |
[정수론] 2. 유클리드 호제법 (0) | 2022.04.06 |
[정수론] 1. 피타고라스 세 수 (4) | 2022.04.06 |