#P1271. 扩展欧几里得算法

扩展欧几里得算法

题目描述

给定两个正整数 a,ba, b,请使用扩展欧几里得算法求出一组整数 x,yx, y,使得

ax+by=gcd(a,b)a \cdot x + b \cdot y = \gcd(a, b)

并输出 gcd(a,b)\gcd(a, b) 以及这组解 (x,y)(x, y)

本题任何一组满足方程的整数解 (x,y)(x, y) 都算正确,不要求唯一。

输入格式

一行,两个整数 a,ba, b1a,b1091 \le a, b \le 10^9)。

输出格式

一行,三个整数 g  x  yg \; x \; y,分别表示 gcd(a,b)\gcd(a, b)、以及满足方程的一组解 x,yx, y

样例

30 20
10 1 -1

(验证:30×1+20×(1)=10=gcd(30,20)30 \times 1 + 20 \times (-1) = 10 = \gcd(30, 20)

说明/提示

普通欧几里得算法只能求最大公约数;扩展欧几里得算法在递归求 gcd\gcd 的过程中回溯,同时得到系数 x,yx, y,满足 ax+by=gcd(a,b)a x + b y = \gcd(a, b)。本题使用特判验证,因此任何正确的 (x,y)(x, y) 都会被接受。