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


    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= 22 2^2
    那么4的约数只能为2a 2^a(a的范围是0~2),
    因此4的约数有3个;
    12=2×2×3=22+31 2^2+3^1
    那么12的约数只能为2a3b2^a*3^b(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;
    }
    
    
  • 相关阅读:
    从B树、B+树、B*树谈到R 树
    平衡二叉树、B树、B+树、B*树
    数据库事务和四种隔离级别
    python 安装surprise库解决 c++tools错误问题
    python的sorted函数
    爬虫出现gbk错误
    Windows下Python安装numpy+mkl,Scipy和statsmodels
    Flask--框架及路由
    flask常见面试题
    RE正则表达式
  • 原文地址:https://www.cnblogs.com/gao-hongxiang/p/12342420.html
Copyright © 2020-2023  润新知