比赛 noip 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 __完全平方数 最终得分 100
用户昵称 Okami 运行时间 0.791 s
代码语言 C++ 内存使用 19.33 MiB
提交时间 2016-11-04 19:06:05
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod = 100000007;
const int maxn = 5000005;
typedef long long ll;
int p[maxn],n;
bool vis[maxn];
int fastpow(int x,int a){
	int ans = 1;
	for(;a;a>>=1,x = ((ll)x*(ll)x)%mod){
		if(a&1)ans = (ll)ans*(ll)x%mod;
	}
	return ans;
}
int solve(int x){
	int y = n,z = 0;
	while(y){
		y/=x;
		z+=y;
	}
	if(z&1)--z;
	return fastpow(x,z);
}
int main(){
	freopen("xnumber.in","r",stdin);
	freopen("xnumber.out","w",stdout);
	scanf("%d",&n);
	memset(vis,0,sizeof(vis));
	int cnt = 0,ans = 1;
	for(int i = 2;i<=n;++i){
		if(!vis[i]){
			p[++cnt] = i;
			ans = (ll)ans*(ll)solve(i)%mod;
		}
		for(int j = 1;j<=cnt&&(ll)p[j]*(ll)i<=n;++j){
			vis[(ll)p[j]*(ll)i] = 1;
			if(i%p[j]==0)break;
		}
	}
	cout<<ans<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}