feat(trainer): НОД и НОК (5-6 кл) + функции gcd/lcm в SimExpr
- SimExpr: добавлены whitelisted-функции gcd (алгоритм Евклида) и lcm (арность 2), защищены от NaN/0/отрицательных. Аддитивно — существующие спеки SimForge/Quantik не затронуты - НОВАЯ тема НОД и НОК: gcd-pair (НОД), lcm-pair (НОК). Числа строятся как g·m и g·k (общий множитель) → НОД нетривиален; gcd/lcm считаются и проверяются движком - 60 генераторов, 20 тем; смоук движка 1154/1154, страница 40/40; gcd(36,24)=12, lcm(4,6)=12 верны; эмодзи 0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,7 +38,8 @@
|
||||
asin: 1, acos: 1, atan: 1, arcsin: 1, arccos: 1, arctan: 1, arctg: 1,
|
||||
sqrt: 1, abs: 1, exp: 1, ln: 1, log: -2, log2: 1, log10: 1,
|
||||
floor: 1, ceil: 1, round: 1, sign: 1,
|
||||
min: -1, max: -1, mod: 2, atan2: 2, pow: 2, hypot: -1
|
||||
min: -1, max: -1, mod: 2, atan2: 2, pow: 2, hypot: -1,
|
||||
gcd: 2, lcm: 2
|
||||
};
|
||||
|
||||
// Реализации. Все защищены от исключений на уровне evaluate (домены проверяются
|
||||
@@ -60,7 +61,20 @@
|
||||
floor: Math.floor, ceil: Math.ceil, round: Math.round, sign: Math.sign,
|
||||
min: Math.min, max: Math.max,
|
||||
mod: function (a, b) { return b === 0 ? 0 : a % b; },
|
||||
atan2: Math.atan2, pow: Math.pow, hypot: Math.hypot
|
||||
atan2: Math.atan2, pow: Math.pow, hypot: Math.hypot,
|
||||
// НОД (алгоритм Евклида) и НОК — целочисленные, защищены от NaN/0/отрицательных
|
||||
gcd: function (a, b) {
|
||||
a = Math.abs(Math.round(a)); b = Math.abs(Math.round(b));
|
||||
if (!isFinite(a) || !isFinite(b)) return 0;
|
||||
while (b) { var t = a % b; a = b; b = t; }
|
||||
return a;
|
||||
},
|
||||
lcm: function (a, b) {
|
||||
a = Math.abs(Math.round(a)); b = Math.abs(Math.round(b));
|
||||
if (!a || !b || !isFinite(a) || !isFinite(b)) return 0;
|
||||
var x = a, y = b; while (y) { var t = x % y; x = y; y = t; }
|
||||
return a / x * b;
|
||||
}
|
||||
};
|
||||
|
||||
var CONSTANTS = { pi: Math.PI, PI: Math.PI, e: Math.E, E: Math.E, tau: Math.PI * 2 };
|
||||
|
||||
Reference in New Issue
Block a user