HDU:4432 Sum of divisors
2013-08-01 16:04
211 查看
这个题只要按照题目模拟就好了,其实挺水的,没什么好分析的。
值得注意的地方是计算因子的时候,循环里要给N开方,否则会超时。还有数组不必太开的超大。
当时比赛的时候没有做出来,其实我应该早点看rank的,那么多人做出来就说明很简单。现在跟榜也算是一种经验了吧。
值得注意的地方是计算因子的时候,循环里要给N开方,否则会超时。还有数组不必太开的超大。
当时比赛的时候没有做出来,其实我应该早点看rank的,那么多人做出来就说明很简单。现在跟榜也算是一种经验了吧。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include <algorithm> #include<cstring> using namespace std; int num[1000]={0}; int fun(int x,int m) { int s=0; while(x) { num[s++]=x%m; x=x/m; } return s; } int compute(int s,int m) { int sum=0; for(int i=0;i<s;i++) sum+=num[i]*num[i]; return sum; } int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { int sum=0; for(int i=1;i*i<=n;++i) { if(n%i==0) { sum+=compute(fun(i,m),m); memset(num,0,sizeof(num)); if(n/i!=i) { sum+=compute(fun(n/i,m),m); memset(num,0,sizeof(num)); } } } memset(num,0,sizeof(num)); int s=fun(sum,m); for(int i=s-1;i>=0;i--) { if(num[i]==10) printf("A"); else if(num[i]==11) printf("B"); else if(num[i]==12) printf("C"); else if(num[i]==13) printf("D"); else if(num[i]==14) printf("E"); else if(num[i]==15) printf("F"); else printf("%d",num[i]); } printf("\n"); } return 0; }
相关文章推荐
- hdu 4432 Sum of divisors(十进制转其他进制)
- HDU 4432 Sum of divisors (进制转换模板)
- hdu-4432-Sum of divisors
- hdu 4432 Sum of divisors
- HDU—— 4432 Sum of divisors
- hdu 4432 Sum of divisors(模拟)
- hdu 4432 Sum of divisors
- HDOJ4432 Sum of divisors(暴力)
- 哈理工校园编程练习赛杭电 acm 4432 G.Sum of divisors
- HDU-#4432 Sum of divisors(模拟)
- HDOJ4432 Sum of divisors(暴力)
- ACM 数论 hdu 1492 The number of divisors(约数) about Humble Numbers
- 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
- HDU 4432 Sum of divisors (进制模拟)
- HDU 4676 Sum Of Gcd(欧拉函数求区间gcd之和+分块算法)
- hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法
- HDU 3415 Max Sum of Max-K-sub-sequence 最长K子段和
- HDU 5381 The sum of gcd (2015年多校比赛第8场)
- hdu 3415 Max Sum of Max-K-sub-sequence题解
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)