EH's Blog

题目情境#

题目描述

给定 a,b,ca,b,c,求解不定方程 ax+by=cax+by=c 的一组整数解。

说明/提示

本页为算法笔记。

算法解析:#

扩展欧几里得:递归求 ax+by=gcd⁡(a,b)ax+by=\gcd(a,b) 的一组特解 (x0,y0)(x_0,y_0)(b=0b=0 时 x=1,y=0x=1,y=0)。若 cc 能被 gcd⁡(a,b)\gcd(a,b) 整除,则 x=c/d⋅x0, y=c/d⋅y0x=c/d\cdot x_0,\ y=c/d\cdot y_0 为解,否则无解。复杂度 O(log⁡)O(\log)。

image-20250808145533135

时间复杂度:O(logn){O(logn)}

C++代码实现#

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
    
int exgcd(int a,int b,int &x,int &y){
  if(b == 0) {x=1, y=0; return a;}
  int x1, y1, d;
  d = exgcd(b, a%b, x1, y1);
  x = y1, y = x1-a/b*y1;
  return d;
}
int main(){
  int a, b, c, x, y;
  cin >> a >> b >> c;
  int d = exgcd(a,b,x,y);
  if(c%d == 0) 
    printf("%d %d",c/d*x,c/d*y);
  else puts("none");
  return 0;
}
c
G10 拓展欧几里得-不定方程
https://ehnotgod.site/zh/blog/g10-%E6%8B%93%E5%B1%95%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97-%E4%B8%8D%E5%AE%9A%E6%96%B9%E7%A8%8B
Author EH
Published at August 8, 2026