__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 编译。)

开始练习 →

补全:平方和别在 int 里溢出

补全:求 1² + 2² + … + 100000²。i 是 int,i * i 在 i 超过 46340 以后会溢出。补全后输出总和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

int 的上限是多少

运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; #include <l

开始练习 →

补全:阶乘取模换大类型

补全:求 20! mod (10^9 + 7)。r 小于 10^9 + 7,再乘上 i 就可能超过 int。补全后输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:不用 __int128 的龟速乘

有的评测机不支持 __int128。补全 slow_mul:把 b 按二进制拆,只做加法和翻倍(每一步都取模),照样算出 a × b mod m。补全后输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

素数的定义

第 1 步:2 到 11,先都当作素数 第 2 步:2 没被划掉,是素数 第 3 步:划掉 2 的倍数,从 4 开始 第 4 步:3 没被划掉,是素数 第 5 步:划掉 3 的倍数,从 9 开始 第 6 步:4×4 超过 11,剩下的都是素

开始练习 →

判素数试除到哪就够

判断 n 是不是素数,试除到【0】就够。 本节模型:is_prime(n) 试除到 √n;sieve(n) 埃氏筛出 2..n 的素数。

开始练习 →