AT_arc172_e题解
happy_dengziyue · · 题解
从打表到打表的好题。
1 题意
给定一个数
多次(最多
2 思路
省流:对于每个
首先想到预处理出每个
显然我们无法估计
显然,当
考虑到
开始新一轮打表,暂时只考虑
显然预处理出这
根据欧拉函数相关性质,当
回到这题,显然:
因为
同时:
而预处理满足要求的
3 代码与记录
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000000ll
#define eu 5000000ll
long long a[eu+2];
int q;
long long ans=0;
long long qp(long long a,long long b,long long p=mod){
long long res=1;
while(b){
if(b&1)res=res*a%p;
a=a*a%p; b>>=1;
}
return res;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("e_1.in","r",stdin);
freopen("e_1.out","w",stdout);
#endif
memset(a,0,sizeof(a));
for(int i=1;i<=eu;++i){
if(i%2==0||i%5==0)continue;
long long w=qp(i,i,eu);
if(!a[w])a[w]=i;
}
scanf("%d",&q);
for(int ca=1;ca<=q;++ca){
long long x,y;
scanf("%lld",&x); y=x%eu;
ans=a[y];
// printf("x=%lld y=%lld\n",x,y);
for(;;ans+=eu){
if(qp(ans,ans)==x){printf("%lld\n",ans); break;}
}
}
return 0;
}
提交记录
By dengziyue