
快速幂
阿聊
愿我千帆过尽,归来仍是少年
展开
-
快速幂
以下内容转自:http://www.cnblogs.com/CXCXCXC/p/4641812.html快速幂这个东西比较好理解,但实现起来到不老好办,记了几次老是忘,今天把它系统的总结一下防止忘记。 首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 假...原创 2018-03-08 17:13:51 · 191 阅读 · 0 评论 -
费马小定理
证明: 由欧拉定理可知 当gcd(a,n)==1 时 我们有 Aφ(n-1)≡ 1(mod n) ;所以 我们有 A*Aφ(n-2) ≡ 1(mod n) 所以Aφ(n-2) 就是A关于mod n的逆元 #include <iostream>#include <cstdio>using namespace std;int ...原创 2018-08-03 17:01:37 · 266 阅读 · 0 评论 -
hdu 4704 Sum 【费马小定理】
题目题意:将N拆分成1-n个数,问有多少种组成方法。例如:N=4,将N拆分成1个数,结果就是4;将N拆分成2个数,结果就是3(即:1+3,2+2,3+1)……1+3和3+1这个算两个,则这个就是组合数问题。根据隔板定理,把N分成一份的分法数为C(1,n-1), 把N分成两份的分法数为C(2,n-1),把N分成三份的分法数为C(3,n-1),.... ,把N分成N份的分法...原创 2018-08-04 11:03:56 · 244 阅读 · 1 评论 -
Leading and Trailing
题目题意:求n^k的前3位和后3位。 后3位用快速幂求;求前3位需要知道:一个数n,它可以写成10^x,其中这个x为浮点数,则n^k=(10^x)^k=10^x*k=(10^A)*(10^B);其中A,B分别是x*k的整数部分和小数部分。n^k 它的位数由(10^A)决定,它的位数上的值则有(10^B)决定,因此我们要求n^k的前三位,只需要将10^B求出,再乘以100,就得到了它的前三位...原创 2019-01-25 13:10:21 · 200 阅读 · 0 评论 -
矩阵快速幂
矩阵乘法+快速幂用数组来实现:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=2;int tmp[N][N];void multi(int a[][N],int b[][N],int n){ memset(t...原创 2019-03-13 14:33:32 · 130 阅读 · 0 评论 -
hdu 1568 Fibonacci
题目本来想用矩阵快速幂来做,无果。。。于是用:斐波拉契数列通项公式。。由于这里数值会很大,但我们只需要前四位,所以应利用log取对数来解决分析: 123456=1.23456*10^5; log10(123456)=5.09151; log10(1.23456*10^5)=log10(1.23456)+log10(10^5)=0.09151+5;因为要...原创 2019-03-13 17:27:58 · 136 阅读 · 0 评论