45 lines
935 B
JavaScript
45 lines
935 B
JavaScript
|
|
class Frac {
|
||
|
|
constructor(num, den) {
|
||
|
|
this.num = num;
|
||
|
|
this.den = den;
|
||
|
|
}
|
||
|
|
|
||
|
|
toString() {
|
||
|
|
return `${this.num}/${this.den}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
valueOf() {
|
||
|
|
return this.num / this.den;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function genFarey(i) {
|
||
|
|
const farey = new Set();
|
||
|
|
const fracMap = new Map();
|
||
|
|
|
||
|
|
for (let den = 1; den <= i; den++) {
|
||
|
|
for (let num = 0; num <= den; num++) {
|
||
|
|
const value = num / den;
|
||
|
|
// Only add if this exact value hasn't been added yet
|
||
|
|
if (!fracMap.has(value)) {
|
||
|
|
const frac = new Frac(num, den);
|
||
|
|
fracMap.set(value, frac);
|
||
|
|
farey.add(frac);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Sort fractions by their value
|
||
|
|
return Array.from(farey).sort((a, b) => a.valueOf() - b.valueOf());
|
||
|
|
}
|
||
|
|
|
||
|
|
// Main execution
|
||
|
|
for (let i = 1; i <= 11; i++) {
|
||
|
|
const farey = genFarey(i);
|
||
|
|
console.log(`F${i}: [${farey.join(', ')}]`);
|
||
|
|
}
|
||
|
|
|
||
|
|
for (let i = 100; i <= 1000; i += 100) {
|
||
|
|
console.log(`F${i}: ${genFarey(i).length} members`);
|
||
|
|
}
|