【欧拉计划】13. Large sum
【思路】C/C++
应用高精度,但 Python
可直接计算。同时还可以利用整型和字符串之间的转换和子串功能求解:
【思路】C/C++
应用高精度,但 Python
可直接计算。同时还可以利用整型和字符串之间的转换和子串功能求解:
(本题取 $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)$:
(本题取 $n=20$,$m=4$,$d=8$)
【思路】先 $O(n^2)$ 枚举起始数字,然后 $\mathcal O(md)$ 枚举所有方向的所有数字。时间复杂度为 $\mathcal O(n^2md)$:
(本题取 $n=2000000$)
【思路】$\mathcal O(n)$ 欧拉筛:
(本题取 $n=1000$)
【思路】$\mathcal O(n^3)$ 分别枚举 $a,b,c$ 并判断。
【优化】由于 $a,b,c$ 中的其中一个值可以由另外两个得到,因此可省去第三重循环,时间复杂度优化为 $\mathcal O(n^2)$:
(本题取 $n=1000$,m=13$)
【思路】$\mathcal O(nm)$ 暴力枚举:
(本题取 $n=\text{prime}_{10001}=104743$)
【思路】使用 $\mathcal O(n)$ 的欧拉筛:
(本题取 $n=100$)
【思路】先求平方的和,再求和的平方,最后相减。时间复杂度为 $\mathcal O(n)$:
(本题取 $n=20$)
【思路】本题只需求 $1 \sim 20$ 的最小公倍数即可。
而 $\text{lcm}(a,b)=\dfrac{ab}{\gcd(a,b)}$,因此问题转化成了求 $\gcd$(为了防止爆 int
可以先除后乘或者直接开 long long
)。时间复杂度为 $\mathcal O(\log n)$:
(本题取 $d=10$,$n=1000-100=900$)
【思路】显然满足要求的最大回文数一定为六位数。因此我们只需要三重循环枚举前三位,然后通过回文数性质得到后三位,从而得到一个六位数。最后枚举是否能表示成两个三位数乘积即可。时间复杂度为 $\mathcal O(d^3n)$: