您的位置:首页 > 其它

剩余定理及其应用(杭电1061)

2014-08-07 14:57 309 查看
例题:http://acm.hdu.edu.cn/showproblem.php?pid=1061

题目:Rightmost Digit
题意:给一个正整数n,输出N^N的最右边的数!1<=N<=1000,000,000
解题思路:
本题的思路,很简单,只需计算在每次得到的乘积的对10的余数即可,但是同时会遇到另一个问题,效率太低,原因是计算次数太多,而大多数的计算对结果的没有影响,所以应该寻找另一种方法去解决它,由于N^N的幂太高,所以我们可以进行降幂处理,在此过程中还应用求余的相关知识,最终才能得到正确的结果。

涉及知识:
(A*B)%10=(A%10)*(B%10)%10
(A+B)%10=((A%10)+(B%10))%10

对于减法同样适用,但对于除法就要另作讨论了!

难点:一开始,看到这样的题时就想到,如果按照一般的算法计算肯定会超时,所以必须要在计算过程中对数据进行处理,以此减少运算的次数,但怎么处理,在当时来说就是难点了,一直找不到有效的解决办法,后来在网上查询知道,对于这样的运算,需要进行降幂处理,同时结合一些求余知识,可以高效的计算出结果!
降幂的实现,可以运用递归代码如下:
int solve(int n,int m){

if(m==0) return 1;

if(m==1) return n;

if(m%2==0) return solve(n*n%10,m/2);

if(m%2!=0) return n*solve(n*n%10,(m-1)/2)%10;

}


关键点:

1、降幂

2、取模

解题体会:在解题(变成)过程中通过运用数学及其相关的知识可以大大的减轻运算负担,同时效率会有很好的提升!

整理时间:20140807
整理人:李富昌
剩余定理:
百度百科:http://baike.baidu.com/view/157384.htm?from_id=11200132&type=syn&fromtitle=%E4%B8%AD%E5%9B%BD%E5%89%A9%E4%BD%99%E5%AE%9A%E7%90%86&fr=aladdin#8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: