A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:
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.1
Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.
Find the value of d < 1000 for which 1/ d contains the longest recurring cycle in its decimal fraction part.
using System;
using System.Collections.Generic;
namespace project_euler
{
class Program
{
static void Main()
{
//Problem 26
DateTime start = DateTime.Now;
int maxLength = 0, result=0;
for( int i=1; i<1000; i++ )
{
int length = LengthOfCycle(i);
if( length > maxLength )
{
result = i;
maxLength = length;
}
}
Console.WriteLine(result);
TimeSpan time = DateTime.Now - start;
Console.WriteLine("This took {0}", time);
Console.ReadKey();
}
public static int LengthOfCycle(int n)
{
var quotients = new List<int>(1000){0};
var remainders = new List<int>(1000) {1};
for (int i = 1; i < 1000; i++)
{
quotients.Add(remainders[i - 1]*10/n);
remainders.Add(remainders[i - 1]*10 - quotients[i]*n);
for (int j = 0; j < i; j++)
if (quotients[j] == quotients[i] && remainders[j] == remainders[i])
return i - j;
}
return -1;
}
}
}
No comments:
Post a Comment