基准时间限制:
1
秒 空间限制:
131072
KB
1/N! = 1/X + 1/Y,给出N,求满足条件的整数解的数量。例如:N = 2,1/2 = 1/3 + 1/6,1/2 = 1/4 + 1/4。由于数量可能很大,输出Mod 10^9 + 7。
Input
输入一个数N(1 <= N <= 1000000)。
Output
输出解的数量Mod 10^9 + 7。
Input示例2Output示例2
本体是一个简单的素因子分解
最后不要忘记求逆元
#include <iostream> #include <cstdio> #include <cstring> using namespace std; long long num[1000005]; long long cnt; const long long MOD=1e9+7; bool prime[2000000]; void get(){ memset(prime,1,sizeof(prime)); for(long long i=2; i<1000050; i++){ if(prime[i]==1) for(long long j=i*i; j<1000050; j+=i) prime[j]=0; } } void su(long long n){ cnt=0; memset(num,0,sizeof(num)); for(long long i=2; i<=n; i++){ long long m=n; while(m>=1&&prime[i]==1){ m/=i; num[cnt]+=m; } cnt++; } } int main() { get(); long long sum; long long n; sum=1; cin>>n; su(n); for(int i=0; i<cnt; i++){ sum*=((2*num[i]+1)%MOD); sum%=MOD; } cout<<((sum+1)%MOD*(500000004)%MOD)%MOD<<endl; return 0; }