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;
}


一応正しい結果がでたけど,一般性のある方法なのかは謎.そのうち証明を試みてみたいと思います.