HDU 4432 Sum of divisors
来源:互联网 发布:鼠标测试软件绿色版 编辑:程序博客网 时间:2024/05/16 11:59
题意:输入n、m,将n的所有因数转化成m进制的数,并将转化后的每一位数字的平方和加起来,再将这个和转化成m进制的数输出
解题思路:模拟.用vector容器分别存储因数和转化后的数,这里需要注意的是求n的因数时不能直接遍历1~n,会超时,可以遍历1~sqrt(n),每次加入两个因数,节省时间,但是要特判如果n是某个数的平方,就直接加入这一个数字即可,不然会重复加入。还要注意的就是如果转化后的数字>=10&&<=15,就要变成对应的A~E,不然就会出错
代码:
#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <cmath>#include <cstdio>#include <vector>using namespace std;typedef long long ll;ll n,m,sum;vector<ll> v1,v2;void solve(ll x){ for(ll i=1; i*i<=x; i++) { if(x%i==0&&i*i<x){v1.push_back(i);v1.push_back(x/i);} else if(x%i==0&&i*i==x)v1.push_back(i);//防止i加入两次 }}void change(ll x,ll k){ v2.clear(); while(x) { ll a=x%k; x/=k; v2.push_back(a); }}int main(){ while(scanf("%I64d%I64d",&n,&m)==2) { v1.clear(); sum=0; solve(n); for(ll i=0; i<v1.size(); i++) { change(v1[i],m); for(int i=0; i<v2.size(); i++) { sum+=v2[i]*v2[i]; } } change(sum,m); for(int i=v2.size()-1; i>=0; i--) { if(v2[i]>=10&&v2[i]<=15)printf("%c",v2[i]-10+'A');//转成字母 else printf("%I64d",v2[i]); } cout<<endl; } return 0;}
阅读全文
0 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(暴力)
- 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 4432Sum of divisors (进制转换模板)
- hdu4432 Sum of divisors
- hdu4432 - Sum of divisors
- Sum of divisors
- Sum of divisors
- hdu4432 Sum of divisors
- Bokeh 借力其他库
- iOS cocoPods使用流程以及常见问题
- 关于android studio打开别人项目一直在building XX gradle project info 的问题
- numpy中random的详解
- 线程池类,线程管理器:创建线程,执行任务,销毁线程,获取线程基本信息
- HDU 4432 Sum of divisors
- ReactNative与NativeScript对比报告
- 关于bootstrap fileupload上传插件的使用
- day_09_文件、目录、进程管理
- struts2学习之第三天
- 理解虚拟内存
- java中的集合框架
- oracle 百分比格式转换/千分位格式化数据
- TensorFlow——训练自己的数据(二)模型设计