非互質の中国の残りの定理-HSU 1573
3474 ワード
https://vj.xtuacm.cf/contest/view.action?cid=86#problem/C互いに質的でない中国の残りの定理のテンプレート、いくつかの細部は中国の残りの定理の中でもし解がなければ-1の別のテーマの要求が正の整数であることに注意しなければならなくて、最後にいくつかの小さい技巧があります
#include
#include
#include
#define ll long long
using namespace std;
ll l;
void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b) {d=a;x=1;y=0;}
else{
ex_gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
ll ex_crt(ll m[],ll r[],int n)
{
ll M=m[1],R=r[1],x,y,d;
for(int i=2;i<=n;i++){
ex_gcd(M,m[i],d,x,y);
if((r[i]-R)%d) return -1;// -1
x=(r[i]-R)/d*x%(m[i]/d);
R+=x*M;
M=M/d*m[i];
R%=M;
}
l=M;
return R<0?R+M:R;
}
int main()
{
ll a[15],b[15];
int t;
scanf("%d",&t);
while(t--)
{
int x;
int y;
scanf("%d %d",&x,&y);
for(int i=1;i<=y;i++)
scanf("%I64d",&a[i]);
for(int i=1;i<=y;i++)
scanf("%I64d",&b[i]);
ll s=ex_crt(a,b,y);
if(s>x||s==-1)// -1
cout<<0<if(s==x)
cout<<1<if(sif(s>0)
cout<1<if(s==0) //0
cout<return 0;
}