比赛 |
20241129 |
评测结果 |
AAAAAAAAAA |
题目名称 |
平方 |
最终得分 |
100 |
用户昵称 |
flyfree |
运行时间 |
0.469 s |
代码语言 |
C++ |
内存使用 |
12.06 MiB |
提交时间 |
2024-11-29 11:06:50 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define MAXN 1000010
inline ll read(){
ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
ll p[MAXN],c[MAXN],cnt,ans=1,n;
ll t[MAXN],s[MAXN];
queue<ll> q;
ll _find(ll x){
ll l=1,r=cnt;
while(l<r){
ll mid=(l+r+1)/2;
if(c[mid]<=x)l=mid;
else r=mid-1;
}
return l;
}
void find(ll x){
while(x>1){
for(int i=1;i<=cnt;i++){
// cout<<x<<" "<<c[i]<<endl;
if(c[i]*c[i]>x){
i=_find(x);
}
if(x%c[i]==0){
x/=c[i];
if(!s[i]){
q.push(i);
}
s[i]++;
break;
}
}
}
while(!q.empty()){
ll y=q.front();
q.pop();
if(s[y]%2){
t[y]++;
}
s[y]=0;
}
}
ll ksm(ll ds,ll zs){
ll now=1;
while(zs){
if(zs&1)now=(now*ds)%mod;
ds=(ds*ds)%mod;
zs/=2;
}
return now;
}
int main(){
freopen("pingfang.in","r",stdin);
freopen("pingfang.out","w",stdout);
for(int i=2;i<=1e6;i++){
if(!p[i])c[++cnt]=p[i]=i;
for(int j=1;j<=cnt;j++){
if(c[j]<=p[i]&&i*c[j]<=1e6){
// if(p[i*c[j]])cout<<"flyfree\n";
p[i*c[j]]=c[j];
}
else break;
}
}
// cout<<cnt;
// for(int i=1;i<=100;i++)cout<<c[i]<<" ";
// cout<<endl;
n=read();
for(int i=1;i<=n;i++){
ll a=read();
find(a);
}
for(int i=1;i<=cnt;i++){
ans=(ans*ksm(c[i],min(t[i],n-t[i])))%mod;
}
cout<<ans<<endl;
return 0;
}