比赛 |
20160420s |
评测结果 |
WWWWWWWWWW |
题目名称 |
最小生成树 |
最终得分 |
0 |
用户昵称 |
WAHT |
运行时间 |
0.006 s |
代码语言 |
C++ |
内存使用 |
1.84 MiB |
提交时间 |
2016-04-20 11:38:30 |
显示代码纯文本
#include <iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=100010;
#define ll long long
int phi[maxn],prime[maxn];
ll mod=100000007;
int main()
{
freopen("msta.in","r",stdin);
freopen("msta.out","w",stdout);
int n;
cin>>n;
for(int i=2;i<=n;i++)
prime[i]=1;
for(int i=2;i*i<=n;i++)
{
if(prime[i])
for(int j=i*i;j<=n;j+=i)
prime[j]=0;
} //这段求出了n内的所有素数
for(int i=1;i<=n;i++) phi[i]=i;
for(int i=2;i<=n;i++)
if(prime[i])
for(int j=i;j<=n;j+=i)
phi[j]=phi[j]/i*(i-1); //此处注意先/i再*(i-1),否则范围较大时会溢出
ll ans=1;
for(int i=2;i<=n;i++) ans=ans*phi[i]%mod;
cout<<ans<<endl;
}