带提交: hdu 1573 X问题(一元同余方程组)

来源:互联网 发布:福建警察学院网络 编辑:程序博客网 时间:2024/05/17 02:44
#include<cstdio>#include<cmath>#include<algorithm>#define ll long longusing namespace std;void gcd(ll a,ll b,ll &d,ll &x,ll &y){    if(!b){d=a;x=1;y=0;}    else{ gcd(b,a%b,d,y,x);y-=x*(a/b);}}int n,N;ll a[100005],r[100005];ll solve(){     //从1开始    ll M=a[1],R=r[1],x,y,d;    for(int i=2;i<=n;i++){        gcd(M,a[i],d,x,y);        if((R-r[i])%d!=0) return -1;        x=(R-r[i])/d*x%a[i];        R-=x*M;        M=M/d*a[i];        R%=M;    }    ll cnt=0,X=(R%M+M)%M;    for(int i=0;X<N;i++){        X+=M;        cnt++;    }    return cnt;}int main(){    int t;    scanf("%d",&t);    while(t--){        scanf("%d%d",&N,&n);        for(int i=1;i<=n;i++)            scanf("%lld",&a[i]);        for(int i=1;i<=n;i++)            scanf("%lld",&r[i]);        printf("%lld\n",solve());    }    return 0;}

原创粉丝点击