LOJ 1341 Aladdin and the Flying Carpet(质因子分解)
2015-09-02 13:09
507 查看
题目链接:http://lightoj.com/volume_showproblem.php?problem=1341
题意:给两个数a,b,求满足c * d = a且c>=b且d>=b的c, d二元组对数,(c, d)和(d, c)属于同一种情况。
思路:根据唯一分解定理,先将a唯一分解,则a的所有正约数的个数为num = (1 + a1) * (1 + a2) *...* (1 + ai),这里的ai是素因子的指数。现在我们知道了a的因子个数为num,假设因子从小到大排列为
X1,X2,...,Xnum 因为是求二元组,所以num先除以2,然后减去那些比b小的因子即可(比b小的一定和比较大的组合,所以不用考虑很大的情况)。
code:
题意:给两个数a,b,求满足c * d = a且c>=b且d>=b的c, d二元组对数,(c, d)和(d, c)属于同一种情况。
思路:根据唯一分解定理,先将a唯一分解,则a的所有正约数的个数为num = (1 + a1) * (1 + a2) *...* (1 + ai),这里的ai是素因子的指数。现在我们知道了a的因子个数为num,假设因子从小到大排列为
X1,X2,...,Xnum 因为是求二元组,所以num先除以2,然后减去那些比b小的因子即可(比b小的一定和比较大的组合,所以不用考虑很大的情况)。
code:
#include <cstdio> #include <cstring> using namespace std; typedef long long LL; const int MAXN = 1000000; int prime[MAXN + 1]; void getPrime() { memset(prime, 0, sizeof(prime)); for (int i = 2; i <= MAXN; ++i) { if (!prime[i]) prime[++prime[0]] = i; for (int j = 1; j <= prime[0] && prime[j] <= MAXN / i; ++j) { prime[prime[j] * i] = 1; if (i % prime[j] == 0) break; } } } LL factor[1000][2]; int fatCnt; int getFactors(LL x) { fatCnt = 0; LL tmp = x; for (int i = 1; i <= prime[0] && prime[i] * prime[i] <= tmp; ++i) { factor[fatCnt][1] = 0; if (tmp % prime[i] == 0) { factor[fatCnt][0] = prime[i]; while (tmp % prime[i] == 0) { ++factor[fatCnt][1]; tmp /= prime[i]; } ++fatCnt; } } if (tmp != 1) { factor[fatCnt][0] = tmp; factor[fatCnt++][1] = 1; } LL ret = 1; for (int i = 0; i < fatCnt; ++i) { ret *= (1L + factor[i][1]); } return ret; } int main() { getPrime(); int nCase; scanf("%d", &nCase); for (int cnt = 1; cnt <= nCase; ++cnt) { LL a, b; scanf("%lld %lld", &a, &b); if (b * b > a) { printf("Case %d: 0\n", cnt); continue; } LL num = getFactors(a); num /= 2; for (int i = 1; i < b; ++i) { if (a % i == 0) --num; } printf("Case %d: %lld\n", cnt, num); } return 0; }
相关文章推荐
- 艺术家的黑色寓言:把“美好”的东西撕碎给你看,并非悲剧那么简单
- ubuntu-11.04-alternate-i386 source.list 更新失效后替代的source.list,基本是可以更新的
- jquery webservice
- HDU 3874 Necklace(线段树啊 单点更新 区间求和)
- 关于软件工程的理解
- 6.1Activity的生命周期
- Ubuntu中Samba的安装配置和使用[图文]
- Spring整合Struts
- JVM致命错误日志(hs_err_pid.log)分析
- Genymotion FAQ
- two eggs
- thinkPHP 数据表的操作
- C#调用百度翻译
- LINUX下常用
- 如何创建和启动一个线程?
- 设计模式学习笔记十九:备忘录模式
- SHUOJ——归并排序——计算思维J题
- OAF学习笔记-16-自定义异常的抛出
- OAF学习笔记-16-自定义异常的抛出
- 自动化脚本自动生成技术探讨