【欧拉计划】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)$:

阅读更多

【欧拉计划】5. Smallest multiple

(本题取 $n=20$)

【思路】本题只需求 $1 \sim 20$ 的最小公倍数即可。

而 $\text{lcm}(a,b)=\dfrac{ab}{\gcd(a,b)}$,因此问题转化成了求 $\gcd$(为了防止爆 int 可以先除后乘或者直接开 long long)。时间复杂度为 $\mathcal O(\log n)$:

阅读更多

【欧拉计划】4. Largest palindrome product

(本题取 $d=10$,$n=1000-100=900$)

【思路】显然满足要求的最大回文数一定为六位数。因此我们只需要三重循环枚举前三位,然后通过回文数性质得到后三位,从而得到一个六位数。最后枚举是否能表示成两个三位数乘积即可。时间复杂度为 $\mathcal O(d^3n)$:

阅读更多