Problem 68, 69
Problem 68は手で解けます.というか手で解きました.
内側の5角形が6〜10の場合と外側の5つが6〜10というケースがありえる
外側が6〜10の方が連結した数字が大きくなるので,後者で考える.
とりあえずこの前提だけでマスは埋められると思います.
そんで,内側の数字の可能性は2通りある(裏表の関係)ということを考慮すれば解けます.
コードを書く方が面倒だったという.
次,記念すべきProblem 69(何が)
問題にある表では1〜10の中で6が最もn/φが大きい.
φがちいさくて,nが大きければ大きくなる.
φはnの倍数が多ければ多いほど小さくなる.
だから・・・ええと,言語不自由で言葉で説明できないのでコードを見てください(汗)
typedef unsigned long long uint64; typedef uint64 natural ; natural phi(natural n) { natural count = 1; for(natural i=2; i<n; ++i) { if(gcd(n,i)==1){ count++;} } return count; } natural f69() { double lgst = 0; natural lgstn = 0; natural diff = 6; for(natural i=6; i<=1000000; i+=diff) { double x = i/(double)phi(i); if(x > lgst) { lgst = x; lgstn = i; diff = lgstn; } } return lgstn; }
一応正しい結果がでたけど,一般性のある方法なのかは謎.そのうち証明を試みてみたいと思います.