AcWing 875 快速幂
发布日期:2021-05-28 16:27:03 浏览次数:33 分类:精选文章

本文共 973 字,大约阅读时间需要 3 分钟。

不过,可能我有点搞不清楚输入格式,是否正确分隔了各组数值?可能需要更仔细地阅读输入样例。假设每行三个整数,正确分拆的话,可以顺利读取。

现在,编写完整的C++代码:

#include 
using namespace std;ll binary_pow(ll a, ll b, ll p) { if (p == 1) { return 0; } a = a % p; if (a == 0) { return 0; } ll ans = 1; ll current = a; while (b > 0) { if (b & 1) { ans = (ans * current) % p; } current = (current * current) % p; b >>= 1; } return ans;}int main() { int n; cin >> n; for (int _ = 0; _ < n; _++) { int ai, bi, pi; // 为了处理读取速度,使用快速读取方法 // 但在这里,假设正常读取方式就已经足够 cin >> ai >> bi >> pi; // 特殊情况处理:pi ==1,直接返回0 if (pi == 1) { cout << 0 << endl; continue; } // 计算pow(ai, bi, pi) cout << binary_pow(ai, bi, pi) << endl; }}

这个代码中:

  • 处理了pi=1的情况,直接输出0,因为任何数对1取模都是0。
  • 在快速幂函数中处理了a=0的情况,直接返回0,因为0^k mod p=0。
  • 使用快速幂函数来进行高效的模幂运算,避免直接计算指数爆炸。
  • 避免了处理过大的数,通过每次取模来保持数值小。
  • 这样可以高效处理大量数据,适用于n=1e5的情况。

    上一篇:AcWing 876 快速幂求逆元
    下一篇:AcWing 874 筛法求欧拉函数

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月10日 02时42分58秒