比赛 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;
}