BZOJ_2721_[Violet 5]樱花_数学

BZOJ_2721_[Violet 5]樱花_数学

Description

BZOJ_2721_[Violet 5]樱花_数学

Input

BZOJ_2721_[Violet 5]樱花_数学

Output

BZOJ_2721_[Violet 5]樱花_数学

BZOJ_2721_[Violet 5]樱花_数学


$\frac{1}{x}+\frac{1}{y}=\frac{1}{m}$

$xm+ym=xy$

$(x-m)*(y-m)=m^{2}$

于是转化为了求$n!$的约数个数

可以用每个质因子搞一下

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define N 1000050
typedef long long ll;
int n,prime[N],cnt;
bool vis[N];
ll ans,mod=1000000007;
int main() {
ll i,j;
ans=1;
scanf("%d",&n);
for(i=2;i<=n;i++) {
if(!vis[i]) {
prime[++cnt]=i;
int tmp=n,r=0;
//while(tmp) r+=tmp/i,tmp/=i;
for(j=i;j>=i&&j<=n;j*=i) {
r+=n/j;
}
ans=ans*(2*r+1)%mod;
}
for(j=1;j<=cnt&&i*prime[j]<=n;j++) {
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
printf("%lld\n",ans);
}
上一篇:[转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)


下一篇:主机性能监控之wmi 获取进程信息