Совершенно случайно непосредственно перед своим днём рождения мне попалась очень заковыристая математическая задачка. Что характерно, в ней самым непосредственным образом участвует число "52". Задачка звучит следующим образом:
Однажды тёмной осенней ночью один злой русский хакер (ЗРХ) загадал два различных целых числа, оба больше единицы и меньше 100. Потом ЗРХ наугад выбрал двух честных программистов. Одному (программисту-П) он сказал результат произведения этих двух чисел, а второму (программисту-С) сообщил их сумму. То есть, чтобы не было разночтений: программист-П знает только произведение этих чисел, а программист-С знает их сумму и друг к другу они не подглядывают. Программисты призадумались... Через некоторое время программист-П сказал своему коллеге по несчастью:
-- Я не могу определить что загадал ЗРХ, мне не хватает данных.
-- А я сразу знал, что тебе не хватит данных! - порадовал его знаток суммы чисел программист-С.
-- Ага, ну тогда я знаю что за числа загадал русский хакер! - сказал программист-П.
-- Ну, раз так... то и я знаю! - сказал второй, и они вместе пошли пить пиво.
Вопрос: прежде чем мы к ним присоединимся - а при чём здесь 52? Обоснуйте.
Уверяю - задача имеет решение. Но это очень интересная задачка - я над ней помучился дней несколько... Но чур в интернеты не подглядывать!

P.S. Термины "русский хакер" и "программисты" можно менять на "блоггер, хипстер, гопник, блондинка, штирлиц - терминатор - мёрфиус, квят - феттель - хэмилтон, ...." что еще?.. - и прочие термины из новостных заголовков.
Замена "ЗРХ" и "Программист" на другие мемы может увеселить формулировку задачи и усмешить её решение. Решайте алгебраическое зубодробительное улыбаясь! = звучит как реклама таблеток для ума.
Чего и всем тоже обязательно желаю!
Однажды тёмной осенней ночью один злой русский хакер (ЗРХ) загадал два различных целых числа, оба больше единицы и меньше 100. Потом ЗРХ наугад выбрал двух честных программистов. Одному (программисту-П) он сказал результат произведения этих двух чисел, а второму (программисту-С) сообщил их сумму. То есть, чтобы не было разночтений: программист-П знает только произведение этих чисел, а программист-С знает их сумму и друг к другу они не подглядывают. Программисты призадумались... Через некоторое время программист-П сказал своему коллеге по несчастью:
-- Я не могу определить что загадал ЗРХ, мне не хватает данных.
-- А я сразу знал, что тебе не хватит данных! - порадовал его знаток суммы чисел программист-С.
-- Ага, ну тогда я знаю что за числа загадал русский хакер! - сказал программист-П.
-- Ну, раз так... то и я знаю! - сказал второй, и они вместе пошли пить пиво.
Вопрос: прежде чем мы к ним присоединимся - а при чём здесь 52? Обоснуйте.
Уверяю - задача имеет решение. Но это очень интересная задачка - я над ней помучился дней несколько... Но чур в интернеты не подглядывать!

P.S. Термины "русский хакер" и "программисты" можно менять на "блоггер, хипстер, гопник, блондинка, штирлиц - терминатор - мёрфиус, квят - феттель - хэмилтон, ...." что еще?.. - и прочие термины из новостных заголовков.
Замена "ЗРХ" и "Программист" на другие мемы может увеселить формулировку задачи и усмешить её решение. Решайте алгебраическое зубодробительное улыбаясь! = звучит как реклама таблеток для ума.
Чего и всем тоже обязательно желаю!
2017-10-05 20:27 (UTC)
2017-10-05 20:45 (UTC)
(только не надо копи-пастить интернеты или если уже знаете решение).
2017-10-05 22:02 (UTC)
2017-10-06 03:18 (UTC)
2017-10-06 05:30 (UTC)
А почему не скажем 16+25 или даже 2+51 ?
2017-10-05 23:40 (UTC)
s=set(xrange(7,198))
for i in primes:
for j in primes:
if j<>i and i+j in s:
s.remove(i+j)
print s
for i in (2,3,5,7):
for j in primes:
if j<>i and i*i+j in s:
print i*i,'*',j,'=',i*i*j
4 * 7 = 28
4 * 13 = 52
4 * 19 = 76
4 * 23 = 92
4 * 31 = 124
4 * 37 = 148
4 * 43 = 172
4 * 47 = 188
4 * 53 = 212
4 * 61 = 244
4 * 67 = 268
4 * 73 = 292
4 * 79 = 316
4 * 83 = 332
4 * 89 = 356
4 * 97 = 388
9 * 2 = 18
25 * 2 = 50
49 * 2 = 98
Edited at 2017-10-05 23:47 (UTC)
2017-10-06 03:30 (UTC)
> for j in primes:
Зачем так себя ограничивать? Почему нет остальных чисел?
2017-10-06 21:27 (UTC)
-- А я сразу знал, что тебе не хватит данных! - порадовал его знаток суммы чисел программист-С.
-----
Вот именно. Не объединив свои данные, ответа они не найдут.
2017-10-06 22:13 (UTC)
2017-10-07 02:02 (UTC)
по реке плывут два напильника,один из них курит.высчитайте,сколько мне лет
вовочка - 28
учительница - правильно,расскажи решение
вовочка - мне 14,а папа меня полудурком называет
2017-10-07 12:19 (UTC)
Условие0. Есть два различных целых числа A и B от 2 до 99.
Условие1. По их произведению A*B невозможно определить значения чисел.
Условие2. По их сумме A+B сразу было известно, что определить их значения невозможно.
Условие3. Зная произведение A*B и факт того, что "Условие2" = эти числа однозначно вычисляются.
Условие4. Зная сумму A+B и факт того, что "Условие3" = эти числа однозначно вычисляются.
Поехали...
Условие0 =>
сумма чисел от 5 до 98+99=197.
произведение от 6 до 98*99=9702.
Условие1 =>
Это не произведение двух простых чисел. Там как минимум три множителя: A*B = a*b*c. Разложение на простые даёт три и более чисел. Максимальное простое число в произведении <50, иначе оно сразу B и оставшийся хвост = A (поскольку если B=b*n, где b>50, то вылезаем за 100).
Условие2 =>
1) Это не сумма двух простых чисел (я даже термин придумал: "не-плюсо-простые", НПП).
2) Сумма A+B не более 55, иначе возможен расклад:
=> A+B=53(простое)+n для A+B от 55 до 152;
=> и A+B=97(простое)+n для оставшихся 153-197.
(то есть, второй не мог заявить "а я сразу знал...")
То есть, ищем пару чисел, сумма которых:
1) нечётная, т.е. представляется как 2+a*b или 2*a+b*c
2) не является суммой простых (здесь перебор от 2 до 53, больше не надо).
3) сразу можно выкинуть двойные попадания 2^n + p (простое), поскольку:
11=4+7 и 11=8+3 - второй не сможет по сумме сказать "а теперь и я знаю".
Остаются суммы:
17, 29, 41, 53
Далее число представляется как:
1) сумма 2*a+b*c = разложение на простые => варианты сумм a+b*c, a*b+c, a*c+b.
2) в двойных скобках (()) искомое число,
3) а просто в скобках () второй вариант числа, у которого нет разложения на сумму простых (удовлетворяет условию2).
Два или более чисел в скобках = нарушение условия3. Два однозначных набора без нарушения условия3 = нарушение условия4. То есть, надо найти число, у которого единственный вариант без двух (или более) чисел в скобках.
17 ->
2+15 = 2,3,5 => ((17)), (11), 13 = два числа в скобках, т.е. неоднозначное, поскольку два набора возможных сумм A+B, выкидывается по условию3.
4+13 = однозначное ((17)).
8+9 = 8,3,3 = ((17)), (27) два числа в скобках, выкидывается по условию3.
10+7 = 2,5,7 => (37), ((17)), 19 тоже самое.
12+5 = 4,3,5 => 19, ((17)), (23) тоже самое.
14+3 = 2,3,7 => (23), 13, ((17)) оно же.
Всё! ====> {4,13} удовлетворяет условию задачи.
Теперь надо доказать единственность решения. Перебираем дальше.
29 ->
2+27 = 2,3,3,3 => ((29)), 15, 21 однозначность номер1.
4+25 = 4,5,5 => ((29)), 25 = однозначность номер2, дубль, нарушение условия4.
41 ->
4+37 = 4,37 => ((41)) однозначность.
16+25 = 16,5,5 => ((41)), 85 => еще одна однозначность, нарушение услови4.
53 ->
16+37 => однозначность.
40+13 = 8,5,13 => 73, ((53)), 109. <---- вторая однозначность, поскольку при данном разложении на простые 109=104+5, 104 больше 100 и противоречит условию задачи.
Всё.
Единственное решение A,B = {4,13}.
A+B = 17,
A*B = 52 <======= а вот оно и и искомое "пятьдесят два". Это число, которое злой русский хакер сообщил программисту-П.
Edited at 2017-10-07 12:25 (UTC)
2017-10-09 18:54 (UTC)
Часа полтора всего на решение ))
2017-10-09 19:42 (UTC)
Можно ли вообще не ограничивать?