BZOJ_2721_[Violet 5]櫻花_數學
阿新 • • 發佈:2018-04-28
zoj sin www width ++ brush tdi img AC
BZOJ_2721_[Violet 5]櫻花_數學
Description
Input
Output
$\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); }
BZOJ_2721_[Violet 5]櫻花_數學