同餘方程 hdu 3579

来源:互联网 发布:淘宝618大促 编辑:程序博客网 时间:2024/06/05 18:06

求特解

#include<stdio.h>#include<algorithm>using namespace std;int a[10],b[10];int n;int ex_gcd(int a,int b,int &x,int &y){    if(b==0)    {        x=1;        y=0;        return a;    }    int t,res;    res=ex_gcd(b,a%b,x,y);    t=x;    x=y;    y=t-(a/b)*y;    return res;}int solo(){    int x,y,gcd,a1,a2,b1,b2,i,t;    a1=a[0],b1=b[0];    for(i=1;i<n;i++)    {        a2=a[i];        b2=b[i];        gcd=ex_gcd(a1,a2,x,y);        if((b2-b1)%gcd!=0)        {            return -1;        }        t=a2/gcd;        x=(x*(b2-b1))/gcd;        x=(x%t+t)%t;        b1=a1*x+b1;        a1=(a1*a2)/gcd;        b1=(b1%a1+a1)%a1;    }    if(b1==0&&n>1)        b1=a1;    if(b1==0&&n==1)        b1=a[0];    return b1;}int main(){    int t;    scanf("%d",&t);    for(int cs=1;cs<=t;cs++)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        for(int i=0;i<n;i++)        {            scanf("%d",&b[i]);        }        printf("Case %d: %d\n",cs,solo());    }    return 0;}


0 0
原创粉丝点击