どーも、みつおです。
循環節は「循環小数の循環節を求める」のサイトを参考にさせてもらいました!
循環節難しい。。。
問題
単位分数とは分子が1の分数である. 分母が2から10の単位分数を10進数で表記すると次のようになる.
1/2 = 0.5
1/3 = 0.(3)
1/4 = 0.25
1/5 = 0.2
1/6 = 0.1(6)
1/7 = 0.(142857)
1/8 = 0.125
1/9 = 0.(1)
1/10 = 0.10.1(6)は 0.166666… という数字であり, 1桁の循環節を持つ. 1/7 の循環節は6桁ある.
d < 1000 なる 1/d の中で小数部の循環節が最も長くなるような d を求めよ.
出典:Problem26
解答
using System;
using System.Collections.Generic;
using System.Linq;
namespace Problem26
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Solve());
Console.ReadLine();
}
private static int Solve()
{
int ret = 0;
int keta = 0;
int maxketa = 0;
// 1/d 1000未満に対してのループ
for(int i = 2;i < 1000; i++)
{
//循環節数を求める
keta = GetJunkansetu(i);
//桁数の最大値を更新
if (maxketa < keta)
{
maxketa = keta;
ret = i;
}
}
return ret;
}
private static int GetJunkansetu(int no)
{
int ret = 0;
List<int> amarilist = new List<int>();
int amari = 1;
while(true)
{
//余りの数値を10倍する
amari *= 10;
//余りを求める
amari = amari % no;
//割り切れるなら終了
if (amari == 0) break;
//余りのリストに無ければ、追加。リストの中に見つかったら循環節
if (!amarilist.Contains(amari)) amarilist.Add(amari);
else break;
}
//桁数を求める
ret = amarilist.Count();
return ret;
}
}
}
出力
983