Problem 71:Ordered fractions

Problem 71:Ordered fractions

题目链接:http://static.projecteuler.net/problem=71

题目大意:将所有形如$frac{n}{d}(d leqslant 1,000,000)$的最简真分数按大小升序排列,求此时$frac{3}{7}$直接左邻的分数的分子。

法里数列

$n$阶法里数列是$0$和$1$之间最简分数的数列,由小至大排列,每个分数的分母不大于$n$。

设$F_n$为$n$阶法里数列,则有如下性质:

  • $|F_n|=|F_{n-1}|+varphi (n)$.

因为$F_n$仅比$F_{n-1}$多了$E={frac{p}{n}:(p,n)=1}$,其中$|E|=varphi (n)$。由$|F_1|=2,$可推出$|F_n|=1+sum_{i=1}^n varphi(n)$.

  • 若$frac{a}{b}$和$frac{c}{d}$是某$k$阶法里数列的相邻项,且$frac{a}{b} < frac{c}{d}$,则它们之差为$frac{1}{bd}$,也就是说$bc-ad=1$。反之同样成立:若$frac{a}{b}$,$frac{c}{d}$均为真分数,且$frac{a}{b} < frac{c}{d}$,$bc-ad=1$,则有$frac{a}{b}$和$frac{c}{d}$在$k$阶法里数列中是邻项,$k=max{b,d}$.
  • 若$frac{a}{b}$和$frac{c}{d}$是某$k$阶法里数列的相邻项,随着$k$增大,$frac{a}{b}$和$frac{c}{d}$间出现的第一项为$frac{a+c}{b+d}$.

这里用到了法里数列的第三条性质。

代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 int main(void){
 4     int a=2,b=5;
 5     while(b+7<=1000000){
 6         a+=3;
 7         b+=7;
 8     }
 9     cout<<a;
10 }
原文地址:https://www.cnblogs.com/barrier/p/6606117.html