始终卡 Test#10,原因不明,除了求逆元几乎和第一篇题解一致。
#include <iostream>
#include <cstdio>
#include <cctype>
#include <cmath>
#define int long long
using namespace std;
inline void read(int &x)
{
char c=getchar();x=0;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-48,c=getchar();
}
int prm[2000005],top,phi[2000005];
bool ntp[2000005];
void sv()
{
phi[1]=1;
for(int i=2;i<=2000004;i++)
{
if(!ntp[i]) prm[++top]=i,phi[i]=i-1;
for(int j=1;j<=top&&1ll*i*prm[j]<=2000004;j++)
{
ntp[i*prm[j]]=true;
if(i%prm[j]) phi[i*prm[j]]=phi[i]*prm[j];
else{phi[i*prm[j]]=phi[i]*(prm[j]-1);break;}
}
}
}
int fpm(int a,int b,int p)
{
int sum=1;
while(b)
{
if(b&1) sum=1ll*sum*a%p;
a=1ll*a*a%p;b>>=1;
}
return sum;
}
int n,m,x,y,u,v,k,smc[2000005],p,xs[2000005],ys[2000005];
signed main()
{
sv();
read(n);read(m);read(u);read(v);p=n;
u=fpm(u,phi[n]-1,n);
v=fpm(v,phi[n]-1,n);
for(int i=1;i<=m;i++)
{
read(x);read(y);
k=u*x%n-v*y%n;
while(k<0) k+=n;
k%=n;
if(!smc[k]) xs[k]=x,ys[k]=y;
smc[k]++;
if(smc[k]>smc[p]) p=k;
}
printf("%lld %lld\n",xs[p],ys[p]);
return 0;
}