P1445 [Violet]樱花

题目描述

求方程 1/X+1/Y=1/(N!) 的正整数解的组数,其中N≤10^6。

解的组数,应模1e9+7。

输入格式:

输入一个整数N

输出格式:

输出答案

输入样例#1:

1439

输出样例

102426508
#include<bits/stdc++.h>
#define read() freopen("input.txt","r",stdin);
#define write() freopen("output.txt","w",stdout);
using namespace std;
#define ll long long 
#define mod 1000000007
const int maxn = 1e6+10;
int prime[maxn],v[maxn],cnt=0;
ll ans=1,sum[maxn];
void primes(int n){
	for( int i=2; i<=n; i++ ){
		if(!v[i]) prime[++cnt]=i,v[i]=i;
		for( int j=1; j<=cnt; j++ ){
			if(prime[j]*i>n||prime[j]>v[i]) break;
			v[i*prime[j]]=prime[j];
		}
	}
}
int main()
{
	int n;scanf("%d",&n);
	primes(n);
	for( int i=1; i<=cnt; i++ ){
		sum[i]=0;
		for( ll j=prime[i]; j<=n; j*=prime[i]) sum[i]+=n/j;
		sum[i]%=mod;
	}
	for( int i=1; i<=cnt; i++ ){
		ans=(ans*(2*sum[i]+1))%mod;
	}
	printf("%lld",ans);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值