【欧拉计划】17. Number letter counts

(本题取 $n=1000$)

【思路】本题细节较多,可先预处理一些数的字母个数,这样后面的数就可以由前面递推而来。时间复杂度为 $\mathcal O(n)$。

阅读更多

【欧拉计划】13. Large sum

【思路】C/C++ 应用高精度,但 Python 可直接计算。同时还可以利用整型和字符串之间的转换和子串功能求解:

阅读更多

【欧拉计划】12. Highly divisible triangular number

(本题取 $n$ 为第一个因数个数大于 $500$ 的三角形数 $76576500$)

【思路】依次枚举三角形数,每次 $\mathcal O(n)$ 求所有因数,因数个数大于 $500$ 就中断。时间复杂度为 $\mathcal O(n^2)$。

【优化】如果整数 $x$ 有因数 $i$,那么 $\dfrac{x}{i}$ 必然也是它的因数。因此可以把统计因数个数的时间复杂度降到 $\mathcal O(\sqrt n)$,总体优化到 $\mathcal O(n \sqrt n)$:

阅读更多

【欧拉计划】11. Largest product in a grid

(本题取 $n=20$,$m=4$,$d=8$)

【思路】先 $O(n^2)$ 枚举起始数字,然后 $\mathcal O(md)$ 枚举所有方向的所有数字。时间复杂度为 $\mathcal O(n^2md)$:

阅读更多

【欧拉计划】9. Special Pythagorean triplet

(本题取 $n=1000$)

【思路】$\mathcal O(n^3)$ 分别枚举 $a,b,c$ 并判断。

【优化】由于 $a,b,c$ 中的其中一个值可以由另外两个得到,因此可省去第三重循环,时间复杂度优化为 $\mathcal O(n^2)$:

阅读更多