51nod 1189 阶乘分数

来源:互联网 发布:php sendmail 配置 编辑:程序博客网 时间:2024/05/16 17:10

(x-n!)*(y-n!)=(n!)^2

分解 n! 的质因数即可。分解时,需要优化下。

#include<bits/stdc++.h>using namespace std;const int MAXN=1000100;const long long mod=1e9+7;int npri[MAXN],prime[MAXN],sum[MAXN];long long powmod(long long x,long long p){long long ret=1;while(p){if(p&1)ret=x*ret%mod;x=x*x%mod;p>>=1;}return ret;}int main(){long long i,j,n,tmp,ans,prisum=0;for(i=2;i<MAXN;i++){if(!npri[i]){prime[prisum++]=i;for(j=i+i;j<MAXN;j+=i)npri[j]=1;}}while(~scanf("%lld",&n)){memset(sum,0,sizeof(sum));for(i=0;i<prisum;i++){tmp=n;while(tmp){sum[i]+=tmp/prime[i];tmp/=prime[i];}}ans=1;for(i=0;i<prisum;i++){ans=(ans*((sum[i]<<1)+1))%mod;}printf("%lld\n",(ans+1)*powmod(2,mod-2)%mod);}}


0 0
原创粉丝点击