Solutions
Solution 1 (Click to Show/Hide)
function oddPeriodSqrts(n) {
function getPeriod(num) {
let period = 0;
let m = 0;
let d = 1;
let a = Math.floor(Math.sqrt(num));
const a0 = a;
while (2 * a0 !== a) {
m = d * a - m;
d = Math.floor((num - m ** 2) / d);
a = Math.floor((Math.sqrt(num) + m) / d);
period++;
}
return period;
}
function isPerfectSquare(num) {
return Number.isInteger(Math.sqrt(num));
}
let counter = 0;
for (let i = 2; i <= n; i++) {
if (!isPerfectSquare(i)) {
if (getPeriod(i) % 2 !== 0) {
counter++;
}
}
}
return counter;
}