一个数的约数的个数--质因数分解

Problem Description

一个数,如果他的素数因子只包括2,3,5,7,则称这个数为萌数,比如,下面这些数就是前20个萌数:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27。

现在给你一个萌数,请编程计算它的约数的个数。
比如,4是一个萌数,他有3个约数(1,2,4);12也是一个萌数,他有 6 个约数(1,2,3,4,6,12)。

Input
输入包含多组测试用例。
每个测试用例包含一个萌数n, 并且n在64位整数的范围( long long 类型,输入输出用%lld )。
如果n为0,则标志结束输入,不做处理。

Output
对于每个测试用例中的萌数,请输出他的约数的个数。
每个输出占一行。

Sample Input
4
12
0
Sample Output
3
6

拿上面的样例说明一下,其他情况也是这样算的
4=2×2= 2 2 2^2 22
那么4的约数只能为 2 a 2^a 2a(a的范围是0~2),
因此4的约数有3个;
12=2×2×3= 2 2 + 3 1 2^2+3^1 22+31
那么12的约数只能为 2 a ∗ 3 b 2^a*3^b 2a3b(a的范围(0-2),b的范围(0-1)),因此12的约数有3*2=6个。
即一个数的约数的个数=分解质因数的各指数之积

具体代码如下

#include <iostream>
typedef long long ll;
using namespace std;
ll n;
int main()
{
    while(cin>>n){
        if(n==0) break;
        ll a1=1,a2=1,a3=1,a4=1;
        while(n%2==0){
            a1++;
            n/=2;
        }
        while(n%3==0){
            a2++;
            n/=3;
        }
        while(n%5==0){
            a3++;
            n/=5;
        }
        while(n%7==0){
            a4++;
            n/=7;
        }
        ll ans=a1*a2*a3*a4;
        cout<<ans<<endl;
    }
    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值