第一步,和同余方程一样,转化一下 两式相减得 这就转化为了求不定方程,用exgcd 求出x,要化成最小正整数解,避免溢出 然后可以求出P出来. 这个时候要把前两个式子转化成一个式子 设求出来的是P' 则有 这个就转化成了新的m1和b1 然后就一直求下去即可 最终b1就是答案 #include<bits/stdc++.h> #define REP(i, a, b) for(register int i = (a); i < (b); i++) #define _for(i, a, b)
知识储备 扩展欧几里得定理 欧几里得定理 (未掌握的话请移步[扩展欧几里得]) 正题 设存在ax+by=gcd(a,b),求x,y.我们已经知道了用扩欧求解的方法是递归,终止条件是x==1,y==0: int exgcd( int a, int b, int &x, int &y ) { ) { x = ; y = ; return a; } int tmp = a % b; if( tmp > b ) swap( tmp, b ); int ans=exgcd(b,a%b,x,y)