2 的 10 次方模 1000
运行下面这段程序: 本节模型:qpow(a, b, mod) 把指数 b 按二进制拆,O(log b) 求 a^b % mod。 #include <iostream> #include <string> #incl
补全:这一位是 1 就乘上
补全快速幂:当前位为 1 时把答案乘上底数并取模。补全后输出 3^5 mod 1000000007。 本节模型:qpow(a, b, mod) 把指数 b 按二进制拆,O(log b) 求 a^b % mod。 (本题用 g++ -std=
补全:底数平方
补全快速幂:每轮把底数平方并取模。补全后输出 2^16 mod 1000000。 本节模型:qpow(a, b, mod) 把指数 b 按二进制拆,O(log b) 求 a^b % mod。 (本题用 g++ -std=c++17 -O0
补全:指数右移
补全快速幂:每轮把指数右移一位(去掉最低位)。补全后输出 2^5 mod 1000。 本节模型:qpow(a, b, mod) 把指数 b 按二进制拆,O(log b) 求 a^b % mod。 (本题用 g++ -std=c++17 -O
int 最大能装多大
C++ 里 int(32 位)能表示的最大值大约是【0】。
a*b%m 为什么会算错
第 1 步:一格约等于 4 位数字 第 2 步:上:long long,约 19 位 第 3 步:a、b 各 12 位,乘积 24 位 第 4 步:要 6 格,只有 5 格:溢出 第 5 步:__int128 约 38 位:装得下 a、b、
__int128 为什么能救
写成 (__int128)a * b % m 就不会错,是因为【0】。
1LL 先转成大类型
运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {
补全:不溢出的取模乘法
补全 mulmod:用 __int128 算 a × b mod m,m 可以到 10^18。补全后输出结果。 (本题用 g++ -std=c++17 -O0 编译。)
补全:大模数的快速幂
补全快速幂里的两次乘法:模数到 10^18 时也要用 __int128。补全后输出 3^(10^18) mod (10^18 + 9)。 (本题用 g++ -std=c++17 -O0 编译。)