• hihocoder1777 彩球


    思路:

    记录一下快速幂计算过程中爆long long的两种解决方法:

    1. 使用__int128,这玩意本地编译不通过,提交OJ能AC。

    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 
     5 __int128 qpow(__int128 a, __int128 b, __int128 mod) 
     6 {
     7     __int128 ret = 1LL;
     8     while (b) 
     9     {
    10         if (b & 1) ret = ret * a % mod;
    11         a = a * a % mod;
    12         b >>= 1;
    13     }
    14     return ret;
    15 }
    16 
    17 int main() 
    18 {
    19     LL n, k, P;
    20     scanf("%lld %lld %lld", &n, &k, &P);
    21     LL ans = qpow(k, n, P);
    22     printf("%lld
    ", ans);
    23     return 0;
    24 }

    2. 利用和快速幂类似的思想实现如下不会溢出的乘法操作。

    实现:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 LL n, k, p;
     5 LL mul(LL a, LL b)
     6 {
     7     LL ans = 0;
     8     while (b)
     9     {
    10         if (b & 1) ans = (ans + a) % p;
    11         a = (a + a) % p;
    12         b = b >> 1;
    13     }
    14     return ans;
    15 }
    16 
    17 LL Pow(LL a, LL b)
    18 {
    19     LL result = 1;
    20     LL base = a % p;
    21     while (b)
    22     {
    23         if (b & 1) result = mul(result, base) % p;
    24         base = mul(base, base) % p;
    25         b = b >> 1;
    26     }
    27     return result;
    28 }
    29 
    30 int main()
    31 {
    32     cin >> n >> k >> p;
    33     cout << Pow(k, n) << endl;
    34     return 0;
    35 }
  • 相关阅读:
    单实例GI数据库彻底清除
    crsctl & srvctl
    Err "CLSU-00104: additional error information: need ha priv"
    Err "Kernel panic
    安装JRE
    华为-RH5885 V3 远程KVM
    Swagger与OAuth 手动搭建WebApi 操作笔记
    xib自定义View
    iOS回收键盘
    iOS设置用户头像(从相册,图库或者拍照获取)
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9281876.html
Copyright © 2020-2023  润新知