求助玄学WA#7
查看原帖
求助玄学WA#7
349581
qytqytqy楼主2020/9/26 02:00

RT

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
__int128 j,k,m,n,o,p,a[510],b[510],anslcm=1,ans=1;
__int128 i;
inline __int128 read()
{
    __int128 x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
	{
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
	{
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
inline void print(__int128 x)
{
    if(x<0)
	{
        putchar('-');
        x=-x;
    }
    if(x>9)
    print(x/10);
    putchar(x%10+'0');
}
__int128 ksc(__int128 a,__int128 b,__int128 mo)
{
    __int128 sum=0;
	while(b>0)
	{
	    if(b&1) sum=(sum%mo+a%mo)%mo;
	    a=(a%mo+a%mo)%mo;
	    b>>=1;
    }
	return sum;
}
void exgcd(__int128 a,__int128 b,__int128 &x1,__int128 &y1)
{
	if(b!=0)
    {
        exgcd(b,a%b,x1,y1);
        __int128 x2=x1;
        x1=y1;
        y1=x2-a/b*y1;
    }
    else {x1=1;y1=0;}
}
__int128 gcd1(__int128 a,__int128 b)
{
	if(b!=0)
        return gcd1(b,a%b);
    return a;
}
__int128 lcm(__int128 a,__int128 b)
{
	__int128 klk,lkl;
	__int128 gcd=gcd1(a,b);
	return (a/gcd*b);
}
__int128 excrt()
{
	__int128 x,y;
	__int128 mm=b[1],sum=a[1];
	for(i=2;i<=n;i++)
	{
	    __int128 aa=mm,bb=b[i],cc=(a[i]-sum%bb+bb)%bb,gcd=gcd1(aa,bb);
	    exgcd(aa,bb,x,y);
	    if(cc%gcd) return -1;
	    x=ksc(x,cc/gcd,bb);
	    sum+=x*mm;
	    mm=lcm(mm,bb);
        sum=(sum%mm+mm)%mm;
	}
	return sum;
}
int main()
{
	//std::ios::sync_with_stdio(false);
	n=read();
	for(i=1;i<=n;i++)a[i]=read();
	for(i=1;i<=n;i++)b[i]=read();
    ans=excrt();
    print(ans);
	return 0;
}
2020/9/26 02:00
加载中...