(本题取 $n=\text{prime}_{10001}=104743$)
【思路】使用 $\mathcal O(n)$ 的欧拉筛:
(本题取 $n=\text{prime}_{10001}=104743$)
【思路】使用 $\mathcal O(n)$ 的欧拉筛:
【欧拉计划】6. Sum square difference
(本题取 $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)$:
【欧拉计划】4. Largest palindrome product
(本题取 $d=10$,$n=1000-100=900$)
【思路】显然满足要求的最大回文数一定为六位数。因此我们只需要三重循环枚举前三位,然后通过回文数性质得到后三位,从而得到一个六位数。最后枚举是否能表示成两个三位数乘积即可。时间复杂度为 $\mathcal O(d^3n)$:
(本题取 $n=600851475143$)
【思路】在区间 $[2,n]$ 内倒序枚举 $n$ 的所有质因数,输出第一个遍历到的。时空复杂度分别为 $\mathcal O(n \sqrt n)$,$\mathcal O(1)$。
【优化 $1$】在原思路的基础上使用埃氏筛,时间复杂度优化为 $\mathcal O(n \ln \ln n+n)$;使用欧拉筛可优化为 $\mathcal O(n)$。
【优化 $2$】在原思路的基础上将区间缩小为 $[2,\sqrt n]$,时间复杂度优化为 $\mathcal O(n)$。
【优化 $3$】结合优化 $1,2$,时间复杂度可进一步优化至 $\mathcal O(\sqrt n)$(后面研究质数时不再提及质数判断法或埃氏筛,一律只保留欧拉筛)。
【优化 $4$】在【优化 $3$】的基础上,将循环改为正序。这样能减小时间复杂度的常数,同时将空间复杂度降为 $\mathcal O(1)$:
【欧拉计划】2. Even Fibonacci numbers
(本题取 $n=\lfloor \text{fib}^{-1}(4000000) \rfloor=33$)
【思路】运用斐波那契数列递推公式 $a_i=a_{i-1}+a_{i-2}$ 进行递推,超过 $4000000$ 就中断。最后统计其中偶数的和即可。时空复杂度均为 $\mathcal O(n)$。
【优化 $1$】采用滚动变量,将空间复杂度优化到 $\mathcal O(1)$:
(本题取 $n=1000$)
【思路】$\mathcal O(n)$ 枚举所有能被 $3$ 和被 $5$ 整除的数,最后把能被 $15$ 整除的数减掉:
原子的参数包括:
我们不妨先根据构造原理写出每一能层的电子数:
$1 \text s$ | $2 \text s$|$2 \text p$ | $3 \text s$|$3 \text p$ | $4 \text s$|$3 \text d$|$4 \text p$ | $5 \text s$|$4 \text d$|$5 \text p$ | $\cdots$ |
---|---|---|---|---|---|
$2$ | $2$|$6$ | $2$|$6$ | $2$|$10$|$6$ | $\cdots$ | $\cdots$ |
$2$ | $4$|$10$ | $12$|$18$ | $20$|$30$|$36$ | $54$ | $\cdots$ |
$\text{He}$ | $\text{Ne}$ | $\text{Ar}$ | $\text{Kr}$ | $\text{Xe}$ | $\text{Rn}$ |