(本题取 $n=1000$)
【思路】由于范围不大,因而可以直接 $\mathcal O(n^2)$ 枚举,然后套上质数的判断即可。由于待判断的数大小不确定,因而用质数判断函数来代替欧拉筛:
(本题取 $n=1000$)
【思路】由于范围不大,因而可以直接 $\mathcal O(n^2)$ 枚举,然后套上质数的判断即可。由于待判断的数大小不确定,因而用质数判断函数来代替欧拉筛:
【思路】这题的关键就是如何得到循环节。试想,当我们把一个单位分数扩大 $10$ 的若干次幂之后,得到的数的整数部分会出现循环。
因此,我们可以重复地将一个初始值为 $1$ 的数对单位分数的分母取模,然后乘上 $10$。
每操作一次,就检查这个数是否已经出现过。如果出现过,就说明已经找到循环节;否则标记并继续操作:
【欧拉计划】25. 1000-digit Fibonacci number
【思路】采用 Problem 2 中滚动数组的方法,再使用 Python
模拟 / C/C++
高精度:
【欧拉计划】24. Lexicographic permutations
(本题取 $n=10$)
【思路】$\mathcal O(n!)$ 枚举所有排列情况,可用 DFS 实现或直接调用函数 next_permutation
:
(本题取 $n=28123$)
【思路】$\mathcal O(n \sqrt n)$ 预处理因数个数(用 Problem 21 的思路可优化至 $\mathcal O(n)$),然后 $\mathcal O(n^2)$ 模拟。最终的时间复杂度都为 $\mathcal O(n^2)$:
【思路】从文件读入所有名字,然后模拟。难点在于读入的方法。当然也可以另编写一个程序,将所有名字每几个就换一次行,然后把表存在最终程序里(详见 Problem 42):
(本题取 $n=10000$)
【思路】先 $\mathcal O(n)$ 预处理 $1 \sim 10000$ 因数个数,然后 $\mathcal O(n)$ 枚举,总体时间复杂度仍为 $\mathcal O(n)$:
【思路】Python
模拟 / C/C++
高精度:
【思路】按照题意模拟即可:
(本题取 $n=16$)
【思路】暴力 DFS,时间复杂度为 $\mathcal O(2^n)$。
【优化】采用 $\mathcal O(n^2)$ 的 DP: