28 lines
908 B
JavaScript
28 lines
908 B
JavaScript
|
const process = require("process");
|
||
|
const 求最大公约数 = (a, b) => (b ? 求最大公约数(b, a % b) : a);
|
||
|
const 求最小公倍数 = (a, b) => (a * b) / 求最大公约数(a, b);
|
||
|
|
||
|
function 求约分数(分子, 分母) {
|
||
|
const 最大公约数 = 求最大公约数(分子, 分母);
|
||
|
return [分子 / 最大公约数, 分母 / 最大公约数];
|
||
|
}
|
||
|
|
||
|
function 求分数的差(a, b, c, d) {
|
||
|
let 分子 = a * d - c * b;
|
||
|
let 分母 = b * d;
|
||
|
return 求约分数(分子, 分母);
|
||
|
}
|
||
|
|
||
|
let [分子, 分母] = 求约分数(process.argv[2], process.argv[3]);
|
||
|
分子 = 分子 % 分母;
|
||
|
|
||
|
const 埃及分数 = [];
|
||
|
const [a, b] = [分子, 分母];
|
||
|
while (分子 != 1) {
|
||
|
let n = Math.floor(分母 / 分子) + 1;
|
||
|
埃及分数.push(`1/${n}`);
|
||
|
[分子, 分母] = 求分数的差(分子, 分母, 1, n);
|
||
|
}
|
||
|
埃及分数.push(`1/${分母}`);
|
||
|
console.log(`${a}/${b} = ${埃及分数.join(" + ")}`);
|