Project Euler 243
Project Euler 243
题目
Resilience
A positive fraction whose numerator is less than its denominator is called a proper fraction.
For any denominator, \(d\), there will be \(d−1\) proper fractions; for example, with \(d=12\):
\(\dfrac{1}{12},\dfrac{2}{12},\dfrac{3}{12},\dfrac{4}{12},\dfrac{5}{12},\dfrac{6}{12},\dfrac{7}{12},\dfrac{8}{12},\dfrac{9}{12},\dfrac{10}{12},\dfrac{11}{12}\)
We shall call a fraction that cannot be cancelled down a resilient fraction.
Furthermore we shall define the resilience of a denominator, \(R(d)\), to be the ratio of its proper fractions that are resilient; for example, \(R(12) = \dfrac{4}{11}\) .
In fact, \(d=12\) is the smallest denominator having a resilience \(R(d) < \dfrac{4}{10}\).
Find the smallest denominator \(d\), having a resilience \(R(d) < \dfrac{15499}{94744}\) .
解决方案
令\(r=\dfrac{15499}{94799}\)
根据欧拉函数\(\varphi\)的定义,可以知道\(R(d)=\dfrac{\varphi(d)}{d-1}\).
如果一个数\(n\)中质因数越来越多,那么\(\dfrac{\varphi(n)}{n-1}\)就会显著降低,因为随着\(n\)的增大这个比值会无限趋近于\(\dfrac{\varphi(n)}{n}\)。如果一个数\(n\),它的质因数的幂指数越大,那么对答案的贡献将会越低。
并且,如果这些质因数越小,\(\dfrac{\varphi(n)}{n-1}\)下降的越明显。基于这种贪心的思想,假设\(n=\prod_{i=1}^m pr[i]\),其中\(pr\)是一个从小到大的质数列表。
从小到大枚举\(m\),计算出\(n\)的值。如果发现\(\dfrac{\varphi(n)}{n-1}< r\),那么可以不必再找下去,\(n\)将是一个候选的答案。如果\(\dfrac{\varphi(n)}{n-1}\ge r\),但是\(\dfrac{\varphi(n)}{n}< r\) ,那么可以考虑寻找\(n\)的最小的倍数\(k\),使得\(\dfrac{\varphi(k)}{k}< r\),这些\(k\)也是一个候选答案。
这些候选答案的最小值就是最终答案,枚举速度很快。
代码
1 | from sympy import nextprime |