www.51nod.com/onlineJudge/questionCode.html#!problemId=1189

1189 阶乘分数

题目来源: Spoj
基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
收藏
关注
1/N! = 1/X + 1/Y(0<x<=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示例
2
Output示例
2

用到了算术基本定理的性质求解N!所有素因子的个数,和乘法原理计算所有组合。
 #include<bits/stdc++.h>
using namespace std;
#define LL long long
LL mod=1e9+;
int num[];
bool is[];
void init()
{
is[]=is[]=;
int m=sqrt(+0.5);
for(int i=;i<=m;++i)
{
if(!is[i]){
for(int j=i*i;j<=;j+=i)
is[j]=;
}
}
}
int f(int N,int K)
{
int s=;
while(N){
s+=N/K;
N/=K;
}
return s;
}
int main()
{
int N,M,i,j,k,p=;
init();
cin>>N;
M=N;
for(i=;i<=M;++i)
{
if(!is[i])
num[p++]=f(M,i);
}
LL res=;
for(i=;i<p;++i)
{
res=res*(*num[i]+)%mod;
}
res=(res+)*%mod;
cout<<res<<endl;
return ;
} /* 公式化简为 : (X-N!)*(Y-N!)=(N!)2 假设N!=P1a1*P2a2*......*Pnan
那么ans=π(2*ai+1)| 1<=i<=n ,但是要求X<=Y,所以除以二之后向上取整就好了。 */

      

最新文章

  1. C标准头文件&lt;errno.h&gt;
  2. 攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍
  3. ThinkPHP使用PHPmailer发送Email邮件
  4. APK扩展文件及使用
  5. Lucene 排序 Sort与SortField
  6. .animate动画
  7. Java字节码中的方法调用
  8. vdsm的SSL证书验证过程
  9. hdu 1429 胜利大逃亡(延续)(BFS+比特压缩)
  10. nginx+tomcat+session共享(转)
  11. Dynamics CRM2013 附件禁用方案
  12. Runnable和Callable之间的区别
  13. iOS 中的特殊字面量表示方法
  14. python 中 __init__方法
  15. 基本设置_common_setting
  16. oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)
  17. AIO编程
  18. JZ2440 裸机驱动 第14章 ADC和触摸屏接口
  19. win10下搭建深度学习--总结【学习笔记】
  20. 代理模式:利用JDK原生动态实现AOP

热门文章

  1. MySQL中Cardinality值的介绍
  2. mac开发环境爬坑记(搭建php+nginx+mysql+redis+laravel+git+phpstorm)
  3. Django 之 CBV &amp; FBV
  4. (3.2)mysqldump之备份单个表及脚本批量备份
  5. 【转】Python爬虫(6)_scrapy框架
  6. requirejs源码分析: config中shim
  7. 小程序学习第二天 认识框架WXML
  8. iOS 结构简单清晰的 设置页面
  9. $Java HttpClient库的使用
  10. php任务管理器 —— Jobby