hdu1492(约数个数定理)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1492(约数个数定理)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492

 

这里先讲一下约数个数定理:

对于正整数x,将其质因分解为 x = pow(p1, a) * pow*(p2, b) * pow(p3, c) * ...

则其约数个数为:num(x) = (a+1) * (b+1) * (c+1) *...

 

推导:

由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个......pk^ak的约数有(ak+1)个。
故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。

 

那么这道题直接代这个公式好啦~

 

题意:

给出一个64bit的数,求它的约数的个数;

 

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #define ll long long
 4 using namespace std;
 5 
 6 int main(void){
 7     ll n;
 8     while(scanf("%lld", &n)&&n){
 9         int a[4]={1, 1, 1, 1};
10         int b[4]={2, 3, 5, 7};
11         for(int i=0; i<4; i++){
12             while(n%b[i]==0){
13                 a[i]++;
14                 n/=b[i];
15             }
16         }
17         printf("%d\n", a[0]*a[1]*a[2]*a[3]);
18     }
19     return 0;
20 }

 

以上是关于hdu1492(约数个数定理)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1215 求约数和 唯一分解定理的基本运用

HDU 6069 Counting Divisors(区间素数筛法)

算法:约数个数定理

约数个数定理

HDU 1452 Happy 2004(唯一分解定理)

UVA294DIvisors(唯一分解定理+约数个数)