UVA 11440

来源:互联网 发布:浙江大学网络预约 编辑:程序博客网 时间:2024/06/08 20:08

【题目分析】
欧拉函数。


【代码】

#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);    }}
0 0
原创粉丝点击