zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    【2020省选模拟】01.18比赛总结
    【2020省选模拟】01.17比赛总结
    利用dockerfile 安装一个tomcat7
    docker的基本安装和命令详解
    jumpserver1.4.1 安装过程
    Redis info参数总结
    ansible-service
    ansible-yum
    centos源码安装mariadb和Galera 多主集群
    ansible常用模块
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9281876.html
Copyright © 2011-2022 走看看