扩展欧几里德算法模版题 POJ 1061青蛙的约会

来源:互联网 发布:linux android 模拟器 编辑:程序博客网 时间:2024/05/11 09:08

扩展欧几里德算法的分析详见本人的 HDU 1576。

这里直接粘贴代码,公式题应该是广大Acmer最喜欢的题目之一了。

#include<stdio.h>long long Gcd(long long a,long long b){return b?Gcd(b,a%b):a;}long long exGcd(long long a,long long b,long long &x,long long &y){    if(b==0)    {        x=1;y=0;        return a;    }    long long r=exGcd(b,a%b,x,y);    long long t=x;x=y;y=t-a/b*y;    return r;}int main(){long long x,y,m,n,l;//a=m-n;b=-l;y-xlong long p,q,gab;while(~scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)){exGcd(m-n,-l,p,q);gab=Gcd(m-n,-l);if(gab==y-x)printf("%I64d\n",p);else if((y-x)%gab==0){//p1 = p0*(c/Gcd(a,b)),q1 = q0*(c/Gcd(a,b))p=p*((y-x)/gab);int t=1;//p = p1 + b/Gcd(a, b) * tq = q1 - a/Gcd(a, b) * twhile(p<0)p=p+(-l)/gab*(t++);p=p%(-l/gab);//这里公式得到的结果可能不是最简正整数所以要取余printf("%I64d\n",p);}elseprintf("Impossible\n");}return 0;}


0 0
原创粉丝点击