当前位置: 首页> 游戏> 手游 > 高密市赏旋网站设计有限公司_济南富库网络技术有限公司_为什么打开网址都是站长工具_谷歌关键词排名查询工具

高密市赏旋网站设计有限公司_济南富库网络技术有限公司_为什么打开网址都是站长工具_谷歌关键词排名查询工具

时间:2025/8/13 15:23:08来源:https://blog.csdn.net/m0_62112384/article/details/142786715 浏览次数:0次
高密市赏旋网站设计有限公司_济南富库网络技术有限公司_为什么打开网址都是站长工具_谷歌关键词排名查询工具

题目一 快速幂

图源ACWING

解题思路

  1. 预处理出 a 2 0 a^{2^0} a20, a 2 1 a^{2^1} a21, a 2 2 a^{2^2} a22, a 2 4 a^{2^4} a24
  2. 将这些数组合成所要求的ab,即令ab = a 2 0 a^{2^0} a20 * a 2 1 a^{2^1} a21 * a 2 2 a^{2^2} a22 * a 2 4 a^{2^4} a24…(b = 20+21+ 22+ …)将b用二进制表达;

  1. &的用法:& 用作按位与(AND)运算符。它比较两个数的每一位,如果两个相应的位都是1,则结果的该位为1,否则为0。在下方代码中,用b&1来判断b的二进制第一位是否为1
    一些模的性质
  2. (a + b) % p = (a % p + b % p) % p
  3. (a - b) % p = (a % p - b % p) % p
  4. (a * b) % p = (a % p * b % p) % p
  5. ab % p = ((a % p)b) % p

解释了为什么在代码过程中%上一个数结果不会变

代码实现

#include<iostream>using namespace std;void qmi(int a, int b, int p)
{long long res = 1;while(b){if(b&1)//查看b的二进制第一位是否为1{res = res * a % p;}b >>= 1;//b向右进一位;a = (long long)a * a % p;//将a在循环中变成$a^{2^0}$, $a^{2^1}$, $a^{2^2}$, $a^{2^4}$... //%p防止a过大爆int}cout << res << endl;
}int main()
{int n, a, b, p;cin >> n;while(n -- ){scanf("%d%d%d", &a, &b, &p);qmi(a, b, p);}return 0;
}

题目二 快速幂求逆元

图源ACWING

解题思路

什么是逆元
在模运算中,如果 a 和 m是整数,且 a 和 m 互质(即 gcd⁡(a,m)=1),那么存在一个整数 b 使得 a⋅b≡1(modm)。这个 b 就是 a 在模 m 下的乘法逆元。

费马小定理
如果 p 是一个质数,a是一个不被 p整除的整数,那么 ap-1≡1(modp);

由ap-1≡1(modp)得a*ap-2≡1(modp),可得ap-2就是a得逆元(p为质数)

  1. 题目规定p为质数,则根据费马小定理和欧拉定理,可以得出所要求的逆元就是ap-2;
  2. 用快速幂求出ap-2
  3. 按照题目要求返回0~p-1之间的逆元,所以要%p;

代码实现

#include<iostream>using namespace std;long long qmi(int a, int b, int p)
{long long res = 1;while(b){if(b&1){res = res * a % p;}b >>= 1;a = (long long)a * a % p;}return res;
}int main()
{int n, a, p;cin >> n;while(n -- ){scanf("%d%d", &a, &p);long long t = qmi(a, p - 2, p);if(a % p == 0)//如果a与p不互质,则a没有0~p-1内的逆元(在qmi计算过程中有%p这一操作){cout << "impossible" << endl;}else{cout << t << endl;        }}return 0;
}
关键字:高密市赏旋网站设计有限公司_济南富库网络技术有限公司_为什么打开网址都是站长工具_谷歌关键词排名查询工具

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: