HDU 1492(求一个数的倍数)

spoiler posted @ 2011年4月16日 05:14 in 未分类 , 1463 阅读

题目大意:

首先 2,3,5,7是互质的!可以把 N 写成 (2^a)*(3^b)*(5^c)*(7^d)   (a,b,c,d >= 0)!

每次从a ,b,c,d中选出一组数就是一个因数

举例说明一下:12=2^2*3

         因为1也是他的倍数!2能够构成的倍数有(1,1*2,2*2)    3构成的倍数有(1,1*3)

     也就是把(a+1)*(b+1)*....(n+1)就是能整除他的个数

   代码+部分注释:

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int pri[5];
long long times[5];
int pricount(long long num){
	pri[1]=2;
  	pri[2]=3;
	pri[3]=5;
	pri[4]=7;
	memset(times,0,sizeof(times));
	long long i;
	for(i=1;i<=4;i++){
		while(num%pri[i]==0){
			times[i]++;
			num/=pri[i];
		}
	}
	return 0;
}

int main(){
	long long n,sum;
	long long i;
	while(cin>>n,n){
		sum=1;
		pricount(n);
		for(i=1;i<=4;i++)
			sum=sum*(times[i]+1);
                     //注意要+1,上面已经分析了!
		cout<<sum<<endl;
	}
}

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter