AcWing 877. 扩展欧几里得算法-代码注释-golang
原题链接
简单
作者:
望哥
,
2020-07-18 09:30:38
,
所有人可见
,
阅读 563
package main
import "fmt"
import "bufio"
import "os"
var reader=bufio.NewReader(os.Stdin)
var writer=bufio.NewWriter(os.Stdout)
// exgcd 给定正整数a,b,存在x,y,使其满足`a*x+b*y=gcd(a,b)`,
// 扩展欧几里得算法 `x=y′,y=x′−⌊a/b⌋∗y′`,其中 x′和y′满足为 b,a%b的解。
// 故递归求解即可。
// base case 当 `b=0` 时 `ax+by=a` 故而 `x=1,y=0`。
//
// 证明过程参考: https://www.acwing.com/solution/content/1393/
func exgcd(a,b int) (int,int){
if b==0{
return 1,0
}
x,y:=exgcd(b,a%b)
return y, x - (a/b)*y
}
func main(){
var n int
fmt.Fscan(reader, &n)
var a,b int
for i:=0;i<n;i++{
fmt.Fscan(reader, &a,&b)
x,y:=exgcd(a,b)
fmt.Fprintln(writer, x,y)
}
writer.Flush()
}