综合补全:gcd
补全辗转相除,求 1071 和 462 的最大公约数。 综合:把 gcd / 快速幂 / 筛法 / 质因数分解按题目组合起来用。 (本题用 g++ -std=c++17 -O0 编译。)
综合补全:快速幂
补全快速幂的平方步,求 7^13 mod 100。 综合:把 gcd / 快速幂 / 筛法 / 质因数分解按题目组合起来用。 (本题用 g++ -std=c++17 -O0 编译。)
综合补全:筛法计数
补全埃氏筛,数 50 以内有几个素数。 综合:把 gcd / 快速幂 / 筛法 / 质因数分解按题目组合起来用。 (本题用 g++ -std=c++17 -O0 编译。)
综合补全:质因数分解
补全质因数分解的除尽循环,分解 100。 综合:把 gcd / 快速幂 / 筛法 / 质因数分解按题目组合起来用。 (本题用 g++ -std=c++17 -O0 编译。)
怎么证明程序真的对
想确认自己写的快速版程序真的对,最实用的办法是【0】。
写 gcd 和快速幂
场景:实验机上 ~/work/nt/nt.cpp 按指令计算 gcd 和快速幂,但 my_gcd、qpow 还是空的。 任务:补全这两个函数。a、b 可到 10^18,模数 m 可以是 1。make 编译,./nt < sample.
一千万以内的素数个数
场景:~/work/nt/count.cpp 读入 n,数 1..n 里有几个素数。结果是对的,可 n = 10^7 时要跑好几秒。 任务:改写 count.cpp,让 n = 10^7 也能在 1 秒内算完。make 编译(-O2),ti
修好取模乘法
场景:~/work/nt/mul.cpp 计算 a × b mod m。m 小的时候对,m 接近 10^18 时就错了。 任务:修好 mulmod,让 m 到 10^18 也算对。make 编译后用 sample.txt 自测。 可操作范围
修好进制转换的边界
场景:~/work/nt/base.cpp 把 n 转成 base 进制。普通的数都对,可 0 输出了空行,很大的数也转错了。 任务:修好 to_base 里的两个 bug。make 编译后用 sample.txt 自测(里面有 0 和 2
找出费马测试的反例
场景:~/work/nt/fermat.cpp 用「费马测试」判素数:2^(n-1) mod n == 1 就说它是素数。大多数时候对,但不是永远对。 任务:在 ~/题目.txt 给的区间里找一个合数,让 fermat 误判成 prime,