fork download
  1. //디오판토스 방정식은 ax+by = c 형태의 방정식을 말함. 여기서 a,b,c는 상수이고
  2. //x,y가 구하려는 값 (방정식의 모든 값은 정수여야 함!!)
  3. //디오판토스 방정식은 확장 유클리드 알고리즘으로 효율적으로 풀 수 있음
  4. //디오판토스 방정식의 해가 존재하는 경우와 c가 gcd(a,b)로 나누어떨어지는 경우는 동치
  5. //따라서 ax+by=gcd(a,b)로 풀고 나누어떨어지므로 c/gcd(a,b)값만큼 값들에 곱해주면 답
  6. //디오판토스 방정식의 해는 유한하지 않음(무한)
  7. using System;
  8. using System.IO;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11.  
  12. public class Lecture
  13. {
  14. public static void Main(string[] args) {
  15. //39x+15y = 12로 가정
  16. (int x, int y, int g) = Gcd(39, 15);
  17. int k = 12/g;
  18. Console.WriteLine($"x = {x*k}, y = {y*k}");
  19. }
  20.  
  21. //확장 유클리드 알고리즘
  22. public static (int,int,int) Gcd(int a, int b){
  23. if(b == 0) return (1,0,a);
  24. else{
  25. int x, y, g;
  26. (x,y,g) = Gcd(b, a%b);
  27. return (y, x-(a/b)*y, g);
  28. }
  29. }
  30. }
Success #stdin #stdout 0.03s 26356KB
stdin
Standard input is empty
stdout
x = 8, y = -20