比赛 noip 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 __完全平方数 最终得分 100
用户昵称 Kulliu 运行时间 1.212 s
代码语言 C++ 内存使用 1.02 MiB
提交时间 2016-11-04 21:22:33
显示代码纯文本
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cctype>
#include<ctime>
#include<cmath>
#include<queue>
#include<list>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
#define INF 0x7fffffff
#define F(i,l,r) for(int i=l;i<=r;i++)
#define D(i,r,l) for(int i=r;i>=l;i--)
#define rep(i,n) for(i=1;i<=n;i++)
const int maxn=5000100;
const int mod=100000007;
bool zs[maxn];
int n;
void mk()
{
	scanf("%d",&n);
	int i,j;
	for(i=2;i<=n/2+1;i++)
	{
		if(!zs[i])
		{
			for(j=2; i*j <=n;j++)
			zs[i*j]=1;
		}
	}
}
ll qh(ll v)
{
	ll ans=0;
	ll x=n;
	for(;x;x/=v,ans+=x);
	return ans;
}
ll ksm(int a,ll b)
{
	ll ans=1,x=a%mod;
	for(;b;b/=2,x=(x*x)%mod)
	if(b&1)
		ans=(ans*x)%mod;
 
	return ans;
}
void solve()
{
	ll j,sum,ans=1;
	int i;
	for(i=2;i<=n/2+1;i++)
	{
		if(!zs[i])
		{
			j=0;
			sum=qh(i);
			if(sum&1) sum--;
			if(sum!=0)
			j=ksm(i,sum);
			if(j!=0)
			ans=(ans*j)%mod;
		}
	} 
	printf("%I64d\n",ans);
}
int Main(){
	freopen("xnumber.in","r",stdin);
	freopen("xnumber.out","w",stdout);
	mk();
	solve();
}
int start=Main();
int main(){;}