Недавно я увидел математическую задачу от пользователя сети (@cat D) о точке кипения этого сайта. После тщательного анализа я действительно чувствую, что это сложно, и мой мозг может быть легко истощен. . .
Вопросы следующие:
Есть два целых числа x и y больше 1, A знает произведение двух, а B знает их сумму.
A: Я не знаю, что это за два числа!
B: Я не знаю, что это за два числа, я знаю, что ты не знаешь!
А: Теперь я знаю.
Б: Я тоже знаю.
Что это за два числа?
На первый взгляд, какого черта?
После долгих размышлений я, наконец, понял, что в этой статье я решу эту проблему с помощью JS.
(вручную разделите строку, уверены, что сразу знаете ответ?)
Давайте сначала посмотрим на правильные ответы: 4 и 13.
Давайте проверим правильность этого ответа (просто проверим!) и, кстати, разберемся в ситуации!
Первое сочувствие
Поскольку правильные ответы — 4 и 13, то А знает число 52, а А знает, что 52 можно записать как 2 * 26 или 4 * 13. Следовательно, А не знает, какое из этих двух чисел возможно.
Число, известное В, равно 17, но сумма 17 (слово, которое я придумал) может быть 2 + 15, 3 + 14, 4 + 13, 5 + 12, 6 + 11, 7 + 10 и 8 + 9. Несколько вариантов . В это время приходит ключевая информация, и Б уверен, что А не знает ответа. Это первое эмпатическое мышление Б. Процесс мышления выглядит следующим образом:
Если ответы 2 и 15, то А знает 30, но 30 можно разделить на 5*6 и 3*10, поэтому А не может определить ответ. Точно так же B проверяет другие возможности, такие как 3 и 14, 4 и 13, 5 и 12, 6 и 11, 7 и 10, 8 и 9 и т. д., и делает вывод, что A не может знать правильный ответ. Потому что факторизация их произведений не уникальна.
Второе сочувствие
Поскольку B уже сообщил A в это время, A также может изменить причину этой ключевой информации:
Если это 2 и 26, то сумма будет 28. И одна из факторизаций 28 — это 5 + 23, тогда B проверит, уникальна ли факторизация 5 * 23, а поскольку это два простых числа, факторизация должна быть уникальной. Тогда Б не сделал бы вывод, что я не знаю ответа. Таким образом, x и y не могут быть равны 2 и 26, они равны 4 и 13. На этом этапе идея должна быть очень ясной.
Третье сочувствие
Когда Б увидел, что А действительно получил ответ своими словами, он сделал более сложное рассуждение. Позвольте мне говорить это медленно, но вы должны внимательно следить за этим. Если вы не понимаете этого, прочитайте еще два раза, это будет сожги свой мозг и запутайся!
В этот момент Б подумает об этом вопросе с точки зрения А:
Если A может получить правильный ответ, он должен был исключен все остальные возможности, кроме правильного ответа. Условие исключения: только факторизация соответствующего продукта суммы суммы правильных ответов не уникальна. Это условие уникально, то есть я сказал ему раньше: «Я знаю, что ты не знаешь».
Например, посмотрите, если 2 и 15 - это ответ, произведение равно 30, а другое делится на одно из разделенных разложений деления 5 * 6 на 11, и все 11 и разложение 2 + 9, 3 + 8, 4 + 7, 5 + 6 фактор разложения продукта также уникален. В этом случае, если произведение действительно равно 30, в конце концов 2 и 15 являются правильным ответом, или 5 и 6 являются правильным ответом, так что выбора нет. Поэтому 2 и 15 не являются ответом. Точно так же могут не дать ответ и остальные, кроме 4 и 13 пар детей.
Наше сочувствие
(Вышеизложенное просто для проверки ответа, ниже мы просим 4 и 13.)
Что касается эмпатии, то следует отметить, что в этом вопросе есть и третье лицо, то есть: «ты»!
По крайней мере, один из них знает, что произведение равно 52, а другой знает, что сумма равна 17. Но наши читатели, вот и в глазах мазок, а мы не знаем цифр, которые знают двое. У читателя меньше информации, чем у них двоих, поэтому получить правильный ответ гораздо сложнее.
Наша эмпатия заключается в том, чтобы отфильтровать правильный ответ из слов А и Б по очереди.
Наконец-то пришло время писать код! ! !
Мы могли бы также предположить, что x
Сначала посчитаем все возможности x и y:
const max = 100;
let sums = {};
let products = {};
for (var i = 2; i < max; i++) {
let x = i;
for (var d = 0; d < max - x; d++) {
let y = x + d;
let p = x * y;
products[p] = products[p] || [];
products[p].push({ x: x, y: y });
let s = x + y;
sums[s] = sums[s] || [];
sums[s].push({ x: x, y: y });
}
}
произведения — это факторизованный набор произведений всех чисел. Например, значение products[12] равно [{x: 2, y: 6}, {x: 3, y: 4}]. Точно так же суммы - это разложение суммы всех чисел.
О: Я не знаю ответа.
В соответствии с этим предложением нам нужно отфильтровать единственные случаи факторизации в произведениях:
for (let key in products) {
if (products[key].length == 1) {
delete products[key];
}
}
Б: Я не знаю ответа,
Аналогично нам также нужно отфильтровать единственные случаи разложения суммы в суммы:
for (let key in sums) {
if (sums[key].length == 1) {
delete sums[key];
}
}
Б: Я знал, что ты не знаешь!
Для любого возможного значения суммы продукт, соответствующий каждому разложению суммы, должен иметь несколько возможных форм разложения. Отфильтруем неудовлетворенные случаи в суммах:
for (let key in sums) {
let pairs = sums[key];
let flag = pairs.every(function(pair) {
return (pair.x * pair.y) in products;
});
if (!flag) {
delete sums[key];
}
}
А: Теперь я знаю.
Б: Я тоже знаю.
В соответствии с процессом последнего транспозиционного мышления Б мы обходим каждый ключ сумм. Затем возможные результаты определяются в соответствии с условием исключения, то есть, является ли факторизация продукта, соответствующая разложению суммирования, уникальной.
for (let key in sums) {
let pairs = sums[key]
let r = pairs.filter(function(pair) {
let ps = products[pair.x * pair.y];
let r = ps.filter(function(p) {
return (p.x + p.y) in sums
})
if (r.length == 1) {
return true
}
return false
});
if (r.length == 1) {
console.log(r)
}
}
Это конец письма, и я не знаю, понимаю ли я это. . . Это действительно немного окольным путем, и это довольно глупо. .
Кроме того, есть небольшая проблема с кодом, ps.filter — это фишка. Вычисляются два значения 4 и 13. Конечно, он ограничен только числами меньше 100 и только подтверждает существование. Боюсь, единственность нужно доказывать математикой, гипотезой Гольдбаха?
В процессе написания этой статьи я вспомнил сцену, когда смотрел теорию игр, и у меня болит мозг!
Наконец, дайте полноедемонстрационный адрес.