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:
Maxim Dolgolyov
2026-06-25 17:30:36 +03:00
parent 169501f12a
commit a7d20a0c90
2 changed files with 51 additions and 3 deletions
+35 -1
View File
@@ -32,6 +32,7 @@
{ key: 'systems', label: 'Системы', subject: 'algebra', grade: 7, order: 8 },
{ key: 'quadratic', label: 'Квадратные', subject: 'algebra', grade: 8, order: 9 },
{ key: 'progressions', label: 'Прогрессии', subject: 'algebra', grade: 9, order: 10 },
{ key: 'gcd-lcm', label: 'НОД и НОК', subject: 'algebra', grade: 5, order: 1.4 },
{ key: 'fractions', label: 'Дроби', subject: 'algebra', grade: 5, order: 1.5 },
{ key: 'decimals', label: 'Десятичные', subject: 'algebra', grade: 5, order: 1.6 },
{ key: 'negatives', label: 'Отрицательные', subject: 'algebra', grade: 6, order: 1.7 },
@@ -833,6 +834,38 @@
]
},
/* ═══ Тема: НОД и НОК (5–6 класс) ═══
Числа строим как g·m и g·k (общий множитель g) → НОД ≥ g, не тривиален.
gcd/lcm — функции SimExpr (алгоритм Евклида), считаются и проверяются движком. */
/* наибольший общий делитель */
{
id: 'gcd-pair', topic: 'gcd-lcm', order: 1, subject: 'algebra', grade: 5, kind: 'compute',
title: 'НОД двух чисел',
pick: { g: [2, 9], m: [2, 8], k: [2, 8] }, constraint: 'm != k',
derive: { a: 'g*m', b: 'g*k', val: 'gcd(a, b)' },
lhs: 'x', rhs: 'gcd({a}, {b})', display: 'Найдите наибольший общий делитель (НОД) чисел {a} и {b}.',
answerVar: 'x', answer: 'val', integerAnswer: true,
solution: [
{ note: 'Разложите числа на простые множители; НОД — произведение общих множителей в наименьших степенях (или алгоритм Евклида).', tex: '' },
{ note: 'Получаем:', tex: 'x = {ans}' }
]
},
/* наименьшее общее кратное */
{
id: 'lcm-pair', topic: 'gcd-lcm', order: 2, subject: 'algebra', grade: 6, kind: 'compute',
title: 'НОК двух чисел',
pick: { g: [2, 6], m: [2, 7], k: [2, 7] }, constraint: 'm != k',
derive: { a: 'g*m', b: 'g*k', val: 'lcm(a, b)' },
lhs: 'x', rhs: 'lcm({a}, {b})', display: 'Найдите наименьшее общее кратное (НОК) чисел {a} и {b}.',
answerVar: 'x', answer: 'val', integerAnswer: true,
solution: [
{ note: 'НОК = произведение чисел, делённое на их НОД: НОК(a, b) = a·b ÷ НОД(a, b).', tex: '' },
{ note: 'Получаем:', tex: 'x = {ans}' }
]
},
/* ═══ Тема: Десятичные дроби (5 класс) ═══
Строим через десятые/сотые (целые ÷10, ÷100) → ответ печатается чисто. */
@@ -955,7 +988,8 @@
'area-parallelogram': 2, 'area-trapezoid': 3, 'area-rhombus': 2,
// Геометрия — Многоугольники / Подобие
'poly-angles-sum': 1, 'poly-regular-angle': 2, 'sim-side': 1, 'sim-perimeter': 2,
// Дроби / Десятичные / Отрицательные
// НОД/НОК / Дроби / Десятичные / Отрицательные
'gcd-pair': 1, 'lcm-pair': 2,
'frac-of-number': 1, 'frac-add-same': 2,
'dec-add': 1, 'dec-sub': 1, 'dec-mult': 2,
'neg-add': 1, 'neg-sub': 2, 'neg-mult': 2