HDU 1061

  题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果

  解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的,

       因为会超出数据范围,即使是long long也无法存储。

       因此需要利用 (a*b)%c = (a%c)*(b%c)%c,一直乘下去,即 (a^n)%c = ((a%c)^n)%c;

       即每次都对结果取模一次

        

       此外,此题直接使用朴素的O(n)算法会超时,因此需要优化时间复杂度:

         一是利用分治法的思想,先算出t = a^(n/2),若n为奇数,则返回t*t*a,偶数则返回t*t;

         二是使用通过循环实现快速幂取模(其实二者实质上是相同的)。

1.递归解法

/* HDU 1061 Rightmost Digit --- 快速幂取模 */
#include <cstdio>/*@function:    计算n^n%10@param:        n为待计算的数@return:    返回n^n%10的结果@explain:    利用分治策略以及同余定理实现快速幂取模
*/
int pow_mod(int a, int n){if (n == 0){return 1;}int x = pow_mod(a, n / 2);    //x = a^(n/2)long long ans = (long long)x * x % 10;if (n & 1){//若n为奇数ans = ans * a % 10;}return (int)ans;
}int main()
{int t, n;scanf("%d", &t);while (t--){scanf("%d", &n);printf("%d\n", pow_mod(n, n));}return 0;
}

View Code

2.快速幂取模

/* HDU 1061 Rightmost Digit --- 快速幂取模 */
#include <cstdio>/* 快速幂取模 */
int pow_mod(int a, int n){int ans = 1;int t = a % 10;while (n){if (n & 1){//n为奇数ans = ans * t % 10;}n /= 2;    //相当于将n拆成相应的二进制t = t * t % 10;}return ans;}int main()
{int t, n;scanf("%d", &t);while (t--){scanf("%d", &n);printf("%d\n", pow_mod(n, n));}return 0;
}

View Code

转载于:https://www.cnblogs.com/tommychok/p/5308892.html

HDU 1061 Rightmost Digit --- 快速幂取模相关推荐

  1. c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ,其中 为素数 2) 约数和 ...

  2. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  3. 快速幂取模——Pupu(HDU 3003)

    题目: 由题目推出计算公式: ans = (2^(n-1) + 1) % n 因为n取值很大,所以需要用到快速幂取模: int multi(int a,int b) { int ret; ret=1; ...

  4. HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系快速幂取模)

    题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件. 分析: 满足上述对称条件,那么涂色的种类问题我们可以 ...

  5. C语言快速幂取模算法小结

    资料链接:http://www.jb51.net/article/54947.htm C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速幂,实际上是快 ...

  6. 【算法分析与设计】快速幂算法与快速幂取模算法

    文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...

  7. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...

  8. 【快速幂取模】NOI 7833:幂的末尾

    NOI 7833:幂的末尾     点击打开链接 总时间限制: 1000ms 内存限制: 65536kB 描述 幂ab的末3位数是多少? 输入 两个正整数a,b.1 <= a <= 100 ...

  9. 【算法】求n的m次方(快速幂取模)

    题目 求n的m次方,n,m均为自然数. 解析 看似简单的题目,但是要想写的高效还不是那么容易想出来. 实现 unsigned int power(unsigned int a, unsigned in ...

  10. 大数取模运算,快速幂取模运算

    1.快速幂取模 http://www.cnblogs.com/yinger/archive/2011/06/08/2075043.html 快速幂取模就是在O(logn)内求出a^n mod b的值. ...

最新文章

  1. Leptonica在VS2010中的编译及简单使用举例
  2. 接口测试用例——测试用例评审
  3. hdu1233 还是畅通工程 基础最小生成树
  4. PostgreSQL 全文检索 - 词频统计
  5. 【Java】 环境变量如何配置?
  6. Android简单实现图片缩略图类ThumbnailUtils
  7. 如何保护前端JS代码?前端js代码混淆加密
  8. 关于双硬盘电脑掉盘的问题
  9. 看完这篇解决你99%的运维安全陋习,快别踩坑了!
  10. 搜索引擎基本工作原理
  11. UML常用的基本图形简介
  12. 实时控制软件开发第二次作业总结
  13. 读书笔记《能力陷阱》第四章:试着朝更多不同的方向发展自己
  14. MacOS 平台使用CLion工具进行ndk开发示例
  15. 乐高 计算机泡泡龙教案,泡泡龙
  16. 未来老婆查询生成器微信小程序源码 流量主系列
  17. 操作系统-先进先出和最近最久未使用算法-C语言
  18. Redis基础篇-(入门、数据类型、通用命令、Jedis)
  19. IndieLib开源游戏引擎第一篇中文介绍
  20. 西北农林科技大学与陕西师范大学计算机,陕西西安的两所双大学,陕西师范大学和西北大学怎么选择?...

热门文章

  1. 东北大学 最优化期末复习 简答题总结
  2. stdlib.h函数请单
  3. 从实例入手,讲解 CMake 的常见用法。demo1-demo8
  4. NIO的epoll空轮询bug
  5. SpringBoot开发案例之拦截器注入Bean
  6. 对分类型变量,进行编码处理——pd.get_dummies()、LabelEncoder()、oneHotEncoder()
  7. OSPF建立邻居、邻接关系 学习笔记
  8. node-7.2.1 already installed, it's just not linked
  9. OC @class关键字
  10. 笔记 Activator.CreateInstance(Type)