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