【题解】 HDU 1492 The number of divisors(约数) about Humble Numbers

目录

 

题目描述

题意分析

AC代码


题目描述

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description

A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... shows the first 20 humble numbers. 

Now given a humble number, please write a program to calculate the number of divisors about this humble number.For examle, 4 is a humble,and it have 3 divisors(1,2,4);12 have 6 divisors.

Input

The input consists of multiple test cases. Each test case consists of one humble number n,and n is in the range of 64-bits signed integer. Input is terminated by a value of zero for n.

Output

For each test case, output its divisor number, one line per case.

Sample Input

4 12 0

Sample Output

3 6

题意分析

题意:给你一个64位的整数,要你求其约数。64位很大,long long 是一个WA点,然后根据数论知识,

           唯一分解定理,一个大于1的自然数,必能被拆分为质数的乘积。那么其约数就是所得(质数+1)的乘积

AC代码

#include <iostream>
#include <algorithm>
#include <memory.h>
using namespace std;
typedef long long LL;

LL s[4];

LL solve(LL n)
{
    int i;
    LL sum=1;
    memset(s,0,sizeof(s));
    for(i=0;n%2==0;i++)
    {
        s[0]++;
        n/=2;
    }
    for(i=0;n%3==0;i++)
    {
        s[1]++;
        n/=3;
    }
    for(i=0;n%5==0;i++)
    {
        s[2]++;
        n/=5;
    }
    for(i=0;n%7==0;i++)
    {
        s[3]++;
        n/=7;
    }

    for(i=0;i<4;i++)
    {
        sum *= s[i]+1;
    }
    return sum;
}

int main()
{
    LL n,sum;
    while(cin>>n && n)
    {
        sum = solve(n);
        cout<<sum<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41220023/article/details/81502049