#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
void gcd(__int64 a,__int64 b,__int64& d,__int64& x,__int64& y)
{
if(!b) {d=a; x=1; y=0;}
else {gcd(b,a%b,d,y,x); y-=x*(a/b); }
}
//方程 ax+by=c 的整数解
int main()
{
__int64 i,j,x,y,a,b,c;
__int64 x0,y0,X,Y,t,g,B;
while(~scanf("%I64d%I64d%I64d",&a,&b,&c))
{
gcd(a,b,g,x0,y0); //g=gcd(a,b);
if(c%g!=0) {printf("Impossible\n"); continue;}
t=c/g; // t是系数
X=x0*t; Y=y0*t;
B=b/g; if(B<0) B=-B; // B就是 b一撇
printf("%I64d\n",(X%B+B)%B); // 用(X%B+B)%B 就可以求出"最小非负整数解x了
}
// 若A=a/g,B=b/g ,那么任意整数解为 (X+kB,Y-kA); k取任意整数
return 0;
}
解 线性同余方程
最新推荐文章于 2022-02-25 19:01:46 发布