11440 - Help Tomisu(计数问题)

来源:互联网 发布:魔兽大脚mac版7.0更新 编辑:程序博客网 时间:2024/06/05 16:23

细节参见代码:

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 100000007;const int maxn = 10000000+5;int T,kase=0,vis[maxn] = {0};ll n,m,k,phi[maxn];void sieve(int nn) {    int m = sqrt(nn+0.5);    for(int i=2;i<=m;i++) if(!vis[i])        for(int j=i*i;j<=nn;j+=i) vis[j] = 1;}int main() {    sieve(10000000);    phi[1] = phi[2] = 1;    for(int i=3;i<=10000000;i++)        phi[i] = phi[i-1] * (vis[i] ? i : i-1) % mod;    while(~scanf("%lld%lld",&n,&m)&&n) {        ll ans = phi[m];        for(int i=m+1;i<=n;i++) ans = ans * i % mod;        printf("%d\n",(ans-1+mod)%mod);    }    return 0;}

0 0
原创粉丝点击