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

例题: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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值