(本题取 $n=1000000$)
【思路】$\mathcal O(n)$ 欧拉筛,然后枚举所有在范围内质数并检查是否符合题意。程序的时间复杂度为 $\mathcal O(n \log_{10} n)$:
(本题取 $n=1000000$)
【思路】$\mathcal O(n)$ 欧拉筛,然后枚举所有在范围内质数并检查是否符合题意。程序的时间复杂度为 $\mathcal O(n \log_{10} n)$:
【欧拉计划】36. Double-base palindromes
(本题取 $n=1000000$)
【思路】我们可以 $\mathcal O(n)$ 枚举所有在范围的整数,然后每次 $\mathcal O(\log n)$ 进行数位的处理和检查。总体时间复杂度为 $\mathcal O(n \log n)$:
(本题取 $n=1000000$)
【思路】先 $\mathcal O(n)$ 欧拉筛,然后暴力枚举所有在范围内的质数:
(本题取 $n=9$)
【思路】我们可以储存 $0 \sim 9$ 的所有阶乘的值,然后在 $[10,9!]$ 内枚举所有的数并检验即可。枚举的时间复杂度为 $\mathcal O(n!)$:
【欧拉计划】33. Digit cancelling fractions
(本题取 $n=9$)
【思路】题目描述得有些模糊,要求我们找到两个十位数 $a,b$($a \lt b$),使得 $a$ 的十位数和 $b$ 的个位数相等,同时使得 $\dfrac{a}{b}$ 与 $a,b$ 分别删去相同位数之后的商相等。
由于有两个数位相等,因此我们只需要枚举三个数位,这样就可以在 $\mathcal O(n^3)$ 枚举出所有的情况。约分需要用到 $\gcd$,因此最终时间复杂度为 $\mathcal O(n^3 \log n)$:
(本题取 $n=9$)
【思路】我们可以 $\mathcal O(n!)$ 获得 $1 \sim 9$ 的排列,然后在排列组成的九位数中插两个空——其中一个位于两个乘数之间(相当于乘号),另一个位于左式和右式之间(相当于等号)。最后我们检查一下等式是否正确,正确就累加进入答案:
(本题取 $n=200$,$m=8$)
【思路】通过观察不难发现本题考察的是 DP。
如果我们用 $dp_{i,j}$ 表示使用 $j$ 种不同面额凑出 $i$ 分钱的方案个数,那么显然有初始状态:
$$dp_{0,1}=1$$
由于本题数据范围不大,我们可以暴力递推,从而覆盖所有情况。用 $val_i$ 表示第 $i$ 种货币的面额,则有:
$$dp_{i,j}=\sum_{i=1}^n \sum_{j=1}^m \sum_{k=1}^j dp_{i-val_j,k}$$
这样我们便得到了一个 $\mathcal O(nm^2)$ 的做法:
【思路】从二位数开始枚举,直到到达一个较大的预先设置好的上界,在枚举时暴力判断是否符合题意即可:
(本题取 $n=100$)
【思路】考虑构造一个元素不可重的集合,通过 $\mathcal O(n^2)$ 的二维循环枚举所有乘方的结果,最后统计集合内元素个数:
【欧拉计划】28. Number spiral diagonals
(本题取 $n=1000$)
【思路】首先可以发现 $1$ 位于矩阵正中央,即 $(501,501)$ 处。
通过找规律可以发现,每走一步需要顺时针变换一次方向,但是如果已经走过或越界则需再次变换。这样,我们就可以遍历整个矩阵,从而在 $\mathcal O(n^2)$ 的效率下求出对角线的元素之和: