记录:https://www.luogu.com.cn/record/71509746
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
bool flag1;
int T,k;
int a[1001],b[1001],p[1001];
int f[1001];
int jc[1001];
int s[1001][1001],t[1001][1001];
int ksm(int a,int b,int mod){
int res=1;
while(b){
if(b&1)res=1ll*res*a%mod;
a=1ll*a*a%mod;b>>=1;
}
return res;
}
signed main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&k);
for(int i=1;i<=k;i++) scanf("%lld",&a[i]);
for(int i=1;i<=k;i++) scanf("%lld",&b[i]);
for(int i=1;i<=k;i++) scanf("%lld",&p[i]);
for(int i=1;i<=k;i++) s[0][i]=1;
for(int i=1;i<=k;i++)
{
for(int j=1;j<=k;j++)
{
s[i][j]=1ll*s[i-1][j]*a[i]%p[j];
t[i][j]=(1ll*t[i-1][j]*a[i]%p[j]+b[i])%p[j];
// printf("s[%d][%d]=%d,t[%d][%d]=%d %d %d %d\n",i,j,s[i][j],i,j,s[i][j],a[i],b[i],p[j]);
}
}
bool flag=1;
for(int i=1;i<=k;i++)
if(s[i][i]==0&&t[i][i]!=0) flag=0;
if(!flag)
{
puts("No");
continue;
}
for(int i=1;i<=k;i++)
f[i]=1ll*(p[i]-t[i][i])*ksm(s[i][i],p[i]-2,p[i])%p[i];
flag1=1;
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
if(p[i]==p[j]&&f[i]!=f[j])flag1=0;
if(flag1)puts("Yes");
else puts("No");
}
return 0;
}
/*
1
3
1 1 1
2 2 2
3 3 3
*/
找了半天看出来哪里错了qwq