hello kity
期待您的批阅,由于写解题报告时 不一定考虑的很周到,所以如果您有什么不懂的地方,请您留言,然而一天之内我肯定会看见您信息,再对代码注释详细,让您更好的阅读
分类
最新评论
最新留言
链接
RSS
计数器
223109
功能
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; } }