Project Euler Problem #26
HTML
A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:<br/>
<br/>
1/2 = 0.5<br/>
1/3 = 0.(3)<br/>
1/4 = 0.25<br/>
1/5 = 0.2<br/>
1/6 = 0.1(6)<br/>
1/7 = 0.(142857)<br/>
1/8 = 0.125<br/>
1/9 = 0.(1)<br/>
1/10 = 0.1<br/>
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.<br/>
<br/>
Find the value of d 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.<br/>
JavaScript
var getLongestUnitFractionRecurringCycle = function(maxNum){
var longestNum = 1;
var largestCycleSize = 1;
for(var currentNum = longestNum + 1; currentNum <= maxNum; currentNum++){
var cycleSize = getCycleSize(currentNum);
if(cycleSize > largestCycleSize){
largestCycleSize = cycleSize;
longestNum = currentNum;
}
}
return longestNum ;
};
var getCycleSize = function(num){
var numerator = 1;
var numerators = [];
var numeratorDigits = [];
while(!digitsInSequence){
if(numerator == 0){
return 0;
}
//Check if the numerator is previously repeated
for(var i = 0; i < numerators.length; i++){
if(numerator == numerators[i]){
var digitsInSequence = 0;
for(var j = i; j < numerators.length; j++){
digitsInSequence += numeratorDigits[j];
}
return digitsInSequence;
}
}
//Repeat not found, update the numerators and digits
numerators[numerators.length] = numerator;
var digits = 1;
while(num > numerator){
numerator *= 10;
digits++;
}
numeratorDigits[numeratorDigits.length] = digits;
//get the next numerator
numerator = numerator % num;
}
};
console.log(getLongestUnitFractionRecurringCycle(10));
console.log(getLongestUnitFractionRecurringCycle(1000));