acwing基础课——快速幂
创始人
2024-05-16 03:58:38
0次

由数据范围反推算法复杂度以及算法内容 - AcWing

常用代码模板4——数学知识 - AcWing

基本思想:

     求一个数的n次时,我们的时间复杂度为O(n),当n特别大时,效率会很低可能超时,此时我们就需要运用到快速幂,将我们的时间复杂度降低到O(log n)。快速幂的核心思想是,我们预处理一些数据,然后将a^k用我们预处理的数据组合出来,即将a^k拆成若干个预处理的值,我们将k转化为二进制表示,就可以得到我们所需要的数据。

       那么 为什么快速幂的时间复杂度为O(log n)呢?因为我们首先要预处理出log k个数据,对于a的k次方,我们预处理a的2^0,a的2^1,....,a的2^log k,并且可以看出每一个数都是前一个数的平凡,我们直接累积就可以处理出来。

         然后,我们如何将a^k拆成我们预处理的值呢?我们可以将a^k拆成a的2^x1, .... ,a的2^xt的乘积,也等于a的2^x1 + 2^x2 + ... + 2^xt,这样我们就可以发现,我们将k转化成二进制,将对应1的预处理好的数据进行计算即可。这样我们只用花费O(log n)预处理数据,O(1)计算就可以得出答案。

         示例,4^5 mod 10, 我们预处理出 4 的 2^0, 4的2^1,4的2^2,然后将4^5拆解,5的二进制表示为101,即取出4 的 2^0和4的2^2相乘得到结果。

 875. 快速幂 - AcWing题库

给定 n 组 ai,bi,pi,对于每组数据,求出 ai ^ bi mod pi 的值。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含三个整数 ai,bi,pi。

输出格式

对于每组数据,输出一个结果,表示 ai ^ bi mod pi  的值。

每个结果占一行。

数据范围

1≤n≤100000,
1≤ai,bi,pi≤2×1e9

输入样例:

2
3 2 5
4 3 9

输出样例:

4
1
#includeusing namespace std;typedef long long LL;int qmi(int a, int b, int p)
{LL res = 1 % p;while(b){if(b & 1) res = res * a % p;a = (LL)a * a % p;b >>= 1;}return res;
}int main()
{int n;cin >> n;while(n--){int a, k, p;cin >> a >> k >> p;cout << qmi(a, k, p) << endl;}return 0;
}

876. 快速幂求逆元 - AcWing题库

         快速幂加上费马定理(假如p是质数,且gcd(a,p)=1(a和p互质),那么 a^(p-1)  ≡ 1(mod p),即 ( a^(p-1) )%p = 1)的运用,无解的情况为两数不互质,即a为p的倍数,否则我们一定可以通过费马定理构造出来一个解

给定 n 组 ai,pi,其中 pi 是质数,求 ai 模 pi 的乘法逆元,若逆元不存在则输出 impossible。

注意:请返回在 0∼p−1 之间的逆元。

输入格式

第一行包含整数 n。

接下来 n 行,每行包含一个数组 ai,pi,数据保证 pi 是质数。

输出格式

输出共 n 行,每组数据输出一个结果,每个结果占一行。

若 ai 模 pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。

数据范围

1≤n≤1e5,
1≤ai,pi≤2∗1e9

输入样例:

3
4 3
8 5
6 3

输出样例:

1
2
impossible
#include
#includeusing namespace std;typedef long long LL;int qmi(int a, int b,int p)
{LL res = 1;while(b){if(b & 1) res = (LL) res * a % p;b >>= 1;a = (LL) a * a % p;}return res;
}int main()
{int n;cin >> n;while(n--){int a,p;cin>>a>>p;if(a % p == 0) cout << "impossible" << endl;else cout << qmi(a,p - 2,p) << endl;}return 0;
}

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...