思路:

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

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

实现:

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL; __int128 qpow(__int128 a, __int128 b, __int128 mod)
{
__int128 ret = 1LL;
while (b)
{
if (b & ) ret = ret * a % mod;
a = a * a % mod;
b >>= ;
}
return ret;
} int main()
{
LL n, k, P;
scanf("%lld %lld %lld", &n, &k, &P);
LL ans = qpow(k, n, P);
printf("%lld\n", ans);
return ;
}

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

实现:

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n, k, p;
LL mul(LL a, LL b)
{
LL ans = ;
while (b)
{
if (b & ) ans = (ans + a) % p;
a = (a + a) % p;
b = b >> ;
}
return ans;
} LL Pow(LL a, LL b)
{
LL result = ;
LL base = a % p;
while (b)
{
if (b & ) result = mul(result, base) % p;
base = mul(base, base) % p;
b = b >> ;
}
return result;
} int main()
{
cin >> n >> k >> p;
cout << Pow(k, n) << endl;
return ;
}

最新文章

  1. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式
  2. ecshop if标签,超过N条,就输出记录 elseif、库存显示方式
  3. Codeforces Round #341 (Div. 2)
  4. Redis教程(六):Sorted-Sets数据类型
  5. 【Android开发坑系列】之PopupWindow
  6. JS跳转到顶部的方法
  7. cookie和session的代码实现
  8. 学习:java设计模式—工厂模式
  9. 九度OJ 1371 最小的K个数 -- 堆排序
  10. Java中Map遍历的四种方案
  11. Apache添加虚拟主机目录
  12. shell 死循环
  13. 开源消息中间件DotNetMQ
  14. JedisPool操作
  15. iframe标签使用总结与注意问题
  16. 错误代码: 1305 PROCEDURE world.insert_data does not exist
  17. attr和prop的区别以及在企业开发中应该如何抉择
  18. Vue组件之间数据交互与通信
  19. mysql索引及sql执行顺序
  20. MyBatis配置文件中的常用配置

热门文章

  1. 一个表格中选定的tr,显示在另一个表格中
  2. bzoj 2083 [Poi2010]Intelligence test——思路+vector/链表
  3. docker集群管理
  4. window.open全屏
  5. B - Equidistant String
  6. 初学:利用mybatis-generator自动生成代码
  7. Flutter实战视频-移动电商-60.购物车_全选按钮的交互效果制作
  8. xml的的特殊字符转义&amp;
  9. css 属性相关
  10. POJ 3658 Artificial Lake (单调栈)