hdoj 1163 Eddy's digital Roots(数学问题,继续分析) .
前面我写了一篇,居然修改不了,只好继续开一篇写下去
超级传送门(这次是传送到上篇的位置):
http://blog.csdn.net/nikekkaa/article/details/6629858
上一篇用了找规律的方法,现在继续分析另外的想法:
求解思路:
现在分析一个问题,假设将十位数为a,个位数为b的一个整数表示为ab,则推导得
ab*ab = (a*10+b)*(a*10+b) = 100*a*a+10*2*a*b+b*b
根据上式可得:root(ab*ab) = a*a+2*a*b+b*b = (a+b)*(a+b);[公式一]
同理也可证得:root(ab*ab*ab) = (a+b)*(a+b)*(a+b);[公式二]
可以看出,N个相同整数的乘积总值的树根 = 每一项元素的树根的乘积
再设另外一个整数cd,且cd!=ab
ab*cd = (a*10+b)*(c*10+d) = 100*a*c+10*(a*d+b*c)+b*d
根据上式可得:root(ab*cd) = a*c+a*d+b*c+b*d = (a+b)*(c+d);[公式三]
可见,对于两个不相同整数也成立。
最后将上面证得的结果一般化:
N个整数的乘积总值的数根 = 每个项元素的数根的乘积
然后我居然想,是不是要找一个办法出来求root(n)的n次方的结果,后来才发现,n<10000,完全可以一个循环求出来,
所以虽然代码要讲究空间,和效率,但是在允许的条件下,一定不要忘记计算机的高效暴力,在比赛的时候更是哪个方法容易实现就用哪个
然后下面是AC代码:
#include<iostream>
using namespace std;
int findroot(int a)
{
int sum = 0;
while(a > 0)
{
sum += (a % 10);
a /= 10;
}
if(sum / 10 != 0)
{
return findroot(sum);
}
else
return sum;
}
int main()
{
int n;
int temp;
int i;
int ans;
while(scanf("%d",&n) != EOF)
{
if(n == 0) break;
temp = findroot(n);
ans = 1;
for(i=0;i<n;i++)
{
ans = findroot(ans * temp);
}
printf("%d\n",ans);
}
return 0;
}
hdoj 1163 Eddy's digital Roots(数学问题,继续分析) .相关推荐
- HDU1163 Eddy's digital Roots(解法二)【快速模幂+九余数定理】
问题链接:HDU1163 Eddy's digital Roots. 问题简述:参见上述链接. 问题分析:计算n^n的数根,一要快,二要简单.使用快速模幂计算,加上数论中的九余数定理就完美了. 程序说 ...
- HDU1163 Eddy's digital Roots(解法二)【快速模幂+九余数定理】(废除!!!)
本文废除,参见下述链接. 参考链接:HDU1163 Eddy's digital Roots[快速模幂+九余数定理+水题] 问题链接:HDU1163 Eddy's digital Roots. 问题简 ...
- HDU1013 POJ1519 Digital Roots(解法二)
该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的余数,若余数为0则结果为9. 问题链接:HDU1013 POJ1519 Digital Roots.入门练习题,用C语言编写 ...
- HDU1013 POJ1519 Digital Roots
该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的余数,若余数为0则结果为9. 问题链接:HDU1013 POJ1519 Digital Roots.基础训练题,用C语言编写 ...
- HDU1013 POJ1519 Digital Roots(解法三)【废除!!!】
本文废除!!! 参见链接:HDU1013 POJ1519 UVALive2085 Digital Roots[数根+水题] 该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的 ...
- HDU1013 POJ1519 Digital Roots(解法二)【废除!!!】
本文废除!!! 参见链接:HDU1013 POJ1519 UVALive2085 Digital Roots[数根+水题] 该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的 ...
- HDU1013 POJ1519 Digital Roots(解法三)
该问题的最佳解法是利用数论的9余数定理来计算数根.一个数的数根等于该数的9的余数,若余数为0则结果为9. 问题链接:HDU1013 POJ1519 Digital Roots.入门练习题,用C语言编写 ...
- Digital Roots
题目的链接为: http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1028 题目为: Dig ...
- 数学建模——层次分析法Python代码
数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...
- 从数学计算上分析人脑与电脑差异
从数学计算上分析人脑与电脑差异 我们举一个简单的例子:如何实现1+2+3+--+100? 也许你会轻松的回答: 1+100=101 2+99 = 101 3+98 = 101 -- 50+51=101 ...
最新文章
- JavaScript专题之模拟实现call和apply
- 轻松搭建基于 SpringBoot Vue 的 Web 商城应用
- MathType输入补集符号的步骤有哪些
- 对PASCAL VOC 数据集进行数据增强
- 在python中使用grpc和protobuf
- 带有Spring Cloud Config和JHipster的Java微服务
- php是不是面向对象编程,PHP面向对象编程入门
- 无法将 DBNull.Value 强制转换为类型“System.DateTime”。请使用可空类型
- 不小心合并了icloud通讯录_苹果手机怎么恢复通讯录联系人号码?原来方法竟如此简单!...
- 搞懂nginx的proxy模块-01
- uva_1422 Processor
- Python安装第三方库临时使用国内源
- 吴恩达神经网络和深度学习-学习笔记-14-学习率衰减
- 京东质检报告要求和检测项目-京东质检报告怎么弄
- 利用oc门或od门实现线与_OC和OD门、线与和线或
- Android聊天室(源码)
- PHP在线网课问答题库搜索,推荐一个大学mooc网课答案题库在线查询公众号
- Git代码管理流程(分支、fork、tag)
- MATLAB :xlim 、 ylim 、zlim简介
- cmd下获取指定进程名的pid号,并通过taskkill结束该进程