您的位置:首页 > 其它

UVA 11440

2016-09-28 14:52 316 查看
【题目分析】

欧拉函数。

【代码】

#include <cstdio>
#include <cstring>
#include <iostream>
#define ll long long
using namespace std;
const int mod=100000007;
int pri[10000001],phi_fac[10000001],tot=0,n,m,ans;
bool have[10000001];
int main()
{
for (int i=2;i<=10000000;++i)
{
if (!have[i]) pri[++tot]=i;
for (int j=1;j<=tot&&(ll)pri[j]*i<=10000000;++j)
{
have[i*pri[j]]=true;
if (i%pri[j]==0) break;
}
}
phi_fac[1]=phi_fac[2]=1;
for (int i=3;i<=10000000;++i)
if (!have[i]) phi_fac[i]=((ll)phi_fac[i-1]*(i-1))%mod;
else phi_fac[i]=(ll)phi_fac[i-1]*i%mod;
while (scanf("%d%d",&n,&m)!=EOF&&m+n)
{
ans=phi_fac[m];
for (int i=m+1;i<=n;++i) ans=(ll)ans*i%mod;
printf("%d\n",(ans-1+mod)%mod);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva