您的位置:首页 > 其它

POJ 1061 青蛙的约会

2018-02-22 20:24 302 查看
扩展欧几里得算法求解同余方程最小解

1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4
5 long long gcd(int a,int b){
6     return b==0?a:gcd(b,a%b);
7 }
8
9 void exgcd(long long a,long long b,long long &d,long long &x,long long &y){
10     if (!b){
11         d=a;
12         x=1;
13         y=0;
14         return;
15     }
16     long long x1,y1;
17     exgcd(b,a%b,d,x1,y1);
18     x=y1;
19     y=x1-(a/b)*y1;
20     return ;
21 }
22
23 int main(){
24
25     long long x,y,m,n,l;
26     scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
27     long long t,a;
28     long long d;
29     d=gcd(n-m,l);
30     exgcd(n-m,l,d,t,a);
31     t=t*(x-y)/d;
32     long long s=l/d;
33     t=(t%s+s)%s;
34     if ((x-y)%d==0) printf("%lld",t);
35     else printf("Impossible");
36     return 0;
37 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: