uva 10892 素因子分解
2016-02-28 21:28
316 查看
#include <cstdio> #include <cstring> const int maxn = 1E5 + 10; const int INF = 0x3f3f3f3f; int visit[maxn], prime[maxn], kase, T, m, n; int getprime() { memset(visit, 0, sizeof(visit)); int cnt = 0; for (long long i = 2; i < maxn; i++) if (!visit[i]) { prime[cnt++] = i; for (long long j = i * i; j < maxn; j += i) visit[j] = 1; } return cnt; } int main(int argc, char const *argv[]) { int cnt = getprime(); while (~scanf("%d", &n) && n) { long long ans = 1; printf("%d ", n); for (int i = 0; n > 1 && i < cnt; i++) { int k = 0; while (n % prime[i] == 0) n /= prime[i], k++; ans *= k * 2 + 1; } ans = ans / 2 + 1; printf("%lld\n", ans); } return 0; }
题目:给你一个数字N,问有多少对不同的a,b的最小公倍数数N。
分析:数论,组合数学。因式分解,然后计数。
首先打表,计算100000内的素数,然后用试除法求出每个素因子个数;
那么对于每个素数因子pi,设有k个pi则可能的组合为:
(1,pi^k),(pi,pi^k),...(pi^k,pi^k)及(pi^k,1),(pi^k,pi),...(pi ^k,pi^k)
因此有2k+1对,所以结果为π(2ki+1);
这里注意如果a,b不同则会计算重复,因此去掉排列后的结果为 π(2ki+1)/ 2 + 1;
(最后加的1是因为a = b = n时只计算了一次)
相关文章推荐
- 【 AnglularJS】——核心特性之MVC & 模块化
- UINavigationController相关
- JavaScript系列(五:事件)
- VC6杂项整理
- 《二战简史》:简明扼要通俗易懂的专业著作,适合用来快速了解二战基本背景,4星推荐
- [android] 保存文件到手机内存
- CentOS6.5安装与配置Mysql数据库
- mysql集群搭建教程-基础篇
- Matlab 模块库建立 S函数心得 小记
- Git学习笔记之分支
- 【sql语句】好用的sql语句之项目数据库学习总结
- 控制台下文件结束符
- Java类加载器
- 有关上拉输入、下拉输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及、浮空输入、模拟输入区别
- SVPullToRefresh[第三方]下拉刷新上拉加载使用
- 研究生期间有关语音识别方面资料的收集
- POJ Ultra-QuickSort 逆序数 树状数组 归并排序
- PHP CURL 多线程 GET/POST 类
- android JNI库实现reboot,recovery
- 【Android机制】IPC机制之基础知识