文章目录

  • 前言
  • 一、基本思路
  • 二、递归式
  • 三.例题
    • 1. 统计好数字的数目(题目)
    • 2.代码

前言

顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。


一、基本思路

(1)当b是奇数时,那么有 a^b = a * a^*(b-1)
(2)当b是偶数时,那么有 a^b = a^(b/2) * a^(b/2)

例如:
2^10 = 2^5 * 2^5
2^5 = 2 * 2^4
2^4 = 2^2 * 2^2
2^2 = 2^1 * 2^1
2^1 = 2 * 2^0


二、递归式

通过奇数,偶数时的不同情况

typedef long long ll;
ll binaryPow(ll a, ll b, ll m){if(b == 0)return 1;else if(b % 2 == 1)   //或(b&1)执行速度更快 判断是否为奇数return a * binaryPow(a, b - 1, m) % m;else{ll num = binaryPow(a, b/2, m) % m;  //优化 return num * num % m;  // 不直接写成return binaryPow(a, b/2, m) * binaryPow(a, b/2, m)}}

三.例题

1. 统计好数字的数目(题目)

我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (2,3,5 或 7)。

比方说,"2582" 是好数字,因为偶数下标处的数字(2 和 8)是偶数且奇数下标处的数字(5 和 2)为质数。但 "3245" 不是 好数字,因为 3 在偶数下标处但不是偶数。

给你一个整数 n ,请你返回长度为 n 且为好数字的数字字符串 总数 。由于答案可能会很大,请你将它对 109 + 7 取余后返回 。

一个 数字字符串 是每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。

示例1:

输入:n = 1
输出:5
解释:长度为 1 的好数字包括 “0”,“2”,“4”,“6”,“8” 。

示例2:

输入:n = 4
输出:400

示例3:

输入:n = 50
输出:564908303

2.代码

typedef long long ll;
const int MOD = 1e9 + 7;
ll f(ll a,ll b){ll res = 1;   //初始令 res = 1,用来存放累积的结果while(b){  //b!=0即b>0就一直执行循环if(b & 1) //b%2==1res = res * a % MOD; //判断b的二进制末尾是否为1,或理解为判断b是否为奇数。如果是的话,令res乘上a的值。a = a * a % MOD;  //令a平方,并使b右移一位b >>= 1;     //b/2} return res;
}int countGoodNumbers(long long n){return f(5 , (n + 1) / 2) * f(4 , n / 2) % MOD;
}

快速幂算法(c语言)相关推荐

  1. 快速幂算法c语言求a的n次方,快速幂算法(数学)

    什么是快速幂算法? 快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大.所以我们快速幂算法的核心 ...

  2. 快速幂算法c语言求a的n次方,快速幂运算模板(求n^k以及前几位或后几位)

    计算n^k的结果 步骤: 1.把n由十进制转换为二进制,按二进制来计算(最后结果还是一样的) 2.把n由二进制转换为2^k相加的形式 先举个例子: 求5^22: 接着就可以很好地理解了 O(logn) ...

  3. C语言判断一个数是否是质数(蒙格马利快速幂算法)

    前言: 今天搞了一天这个 蒙格马利 什么的,我自己肯定是搞不定,参照了很多资料,写一下自己的理解总结,防止忘了没地方看. 只是我个人的理解,对不对还得另说,一些公式还是不懂,只是大概的理解了下,各位当 ...

  4. 快速幂算法相关题目(Leetcode题解-Python语言)

    50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...

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

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

  6. 六十八、快速幂算法、牛顿迭代法、累加数组+二分查找的变形

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 上次介绍了二分查找算法及其四个变形问题,下面介绍二分法常用的场景和典 ...

  7. 【复习】快速幂算法详解

    快速幂算法 就是求一个高精度幂次取余时的一个快速算法 比如我们要求aba^bab%m的时候 应用于快速幂算法 也就是将O(n)转化为O(logn)的算法 他的原理就是: 252^525 = 2∗2∗2 ...

  8. java位运算求幂,程序员必学:快速幂算法

    前阵子,有小伙伴在我B站的算法教程底下留言 小伙伴们有任何疑问或者希望我解说任何内容,都可以在我的小我私家B站或民众号(xmg_mj)留言哦,我会尽我最大能力.只管抽时间去写文章\录视频来回应人人. ...

  9. python快速幂算法解决大数取模

    1.前置性质 模运算的性质 [(a mod n)×(b mod n)] mod n = (a×b) mod n 指数可以拆分成二进制的形式,如9拆分成 1001 根据二进制的计算,1001 = ((1 ...

最新文章

  1. Scala’s parallel collections
  2. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值
  3. iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
  4. 【小技巧】Xcode7.1中KSImageNamed无效的解决方法
  5. 17-比赛1 A - Weak in the Middle (栈)
  6. HarmonyOS之跨设备分布式应用调试
  7. 一文读懂 HMM 模型和 Viterbi 算法
  8. 数据结构 二叉树的存储结构_线程二叉树| 数据结构
  9. 用友财务软件主要数据表字段含义
  10. 如何销毁一个实例化对象_JAVA中如何创建和销毁对象
  11. 深入理解并发的关键字-volatile
  12. Windows10安装redis(图文教程)
  13. http get post java_Java发送http的get、post请求 - 穿梭于偶然
  14. OFFICE2003的自动保存功能。
  15. 决策树-Cart算法二
  16. Java内存模型JMM
  17. 魏俊妮《如何成为支持业务的HR》课程大纲
  18. dw怎么保存html格式,教你如何用Dreamweaver制作网页以及保存网页的方法--系统之家...
  19. 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
  20. 注意,金士顿Kingston KHX-FAN内存散热器,接口是小3pin母头。

热门文章

  1. 新疆计算机考试ppt教程,职考宝典2021新疆 职称计算机考试模块ppt2007真题试题软件...
  2. matlab导入桌面excel数据库,matlab导入excel数据_excel怎么导入网络上的数据?_excel导入网络数据...
  3. 【独家】彩虹代shua最新6.6版本/免授权/后台同步官方版本升级
  4. 顺序表(Seqlist)链表(List)的基础操作
  5. 性能测试跑分软件,AE Benchmark(AE性能测试跑分工具) V1.0 免费版
  6. MongoDB--- 客户端操作 与 复制集
  7. 菜鸟驿站巴枪APP下载
  8. python qt gui教程_Python GUI教程(四):安装并使用Qt设计师设计Python GUI
  9. mybatis第三话 - mybatis的高端用法你会吗?
  10. pascal和C++的相同/不同