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