萌数
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
题目大意:
素数因子只有2、3、5、7的数称为萌数,输入一个萌数,求这个萌数的约数的个数。
解题思路:
所有自然数都可以分解为若干个质数的乘积,而萌数的质因数只有2、3、5、7四种,一个数的约数的个数=分解质因数的各指数之积,12 = 2 x 2 x 3 = 22 x 31 , 2的指数有0、1、2三种可能,1的指数有0、1两种可能,因此12的约数个数等于3 x 2 = 6种。
AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(int argc, char **argv){
ll n;
while(~scanf("%lld",&n) && n){
ll a=1,b=1,c=1,d=1;
while(n%2==0){
a++;
n/=2;
}
while(n%3==0){
b++;
n/=3;
}
while(n%5==0){
c++;
n/=5;
}
while(n%7==0){
d++;
n/=7;
}
ll ans=a*b*c*d;
printf("%lld\n",ans);
}
return 0;
}