Нашла решение. Как решать сама не знаю, вставляю ссылку. [Задачка очень красивая. Итак, решим ее.
В каких случаях эти числа можно было бы угадать? В том случае, если произведение этих чисел раскладывается на два простых множителя.
Раз Вали знал, что Али не отгадает, значит сумма, сказанная ему султаном, не является суммой двух простых чисел.
Находим суммы всех простых чисел, не превышающие 100:
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67,
71, 73, 79, 83, 89, 97]
pos_sums = set(range(4, 100))
lps_lt_100 = []
for x in primes:
for y in primes:
r = x + y
if r < 100:
lps_lt_100.append(r)
ps_lt_100 = set(lps_lt_100)
sums_s = pos_sums - ps_lt_100
В множество sums_s входят числа, которые не могут быть суммой двух простых чисел. Таковыми являются:
11, 17, 23, 27, 29, 35, 37, 41, 47, 51, 53, 57, 59, 65, 67, 71, 77, 79, 83, 87, 89, 93, 95, 97
Теперь рассмотрим реплику Али - тогда я знаю эти числа, и ответ Вали - тогда и я знаю.
Создадим множества произведений всех возможных слагаемых из которых состоит каждое из вышеуказанных чисел. Угадать оба мудреца смогли бы в том случае, если в множестве существует одно и только одно число, которое не встречается в других множествах. Вот код, который это выполняет:
def possible_pairs(n):
for i in range(2, n//2 + 1):
yield (i, n-i)
mults = []
for n in sums_s:
mults.append(list(possible_pairs(n)))
pos_mults = [set([x*y for x, y in l]) for l in mults]
for i in range(len(pos_mults)):
s1 = pos_mults[i]
others = pos_mults[:i] + pos_mults[i+1:]
s2 = set.union(*others)
print(s1 - s2)
И вот что выдала нам программа:
{24, 18, 28}
{52}
{112, 76}
{176, 152, 50, 140, 92}
{208, 100, 54, 198}
{96, 294, 234, 304, 216, 250, 124}
{160, 232, 336}
{288, 418, 238, 400, 148, 348, 414}
{480, 172, 496, 246, 280, 442, 510}
{608, 578, 644, 230, 518, 650, 620, 98, 494, 144, 308, 344, 468, 188, 638}
{672, 646, 520, 682, 492, 430, 592, 700}
{800, 432, 260, 806, 392, 810, 812, 782, 656, 722, 212, 470, 740, 506, 572, 350}
{864, 688, 738, 868, 220, 814, 528, 564, 598, 760, 828, 318}
{1056, 1026, 676, 1014, 456, 874, 1036, 354, 846, 784, 1000, 1044, 750, 406, 984, 244, 636}
{192, 1120, 742, 1032, 940, 366, 912, 1012, 472, 1116, 990}
{448, 1248, 610, 1188, 1078, 880, 1128, 1258, 268, 558, 1104, 754, 1204, 918, 1240, 708, 954, 1150}
{1410, 1426, 1300, 1176, 670, 1440, 930, 292, 1062, 426, 1452, 1462, 1210, 832, 1476, 1480, 976, 726, 1372, 222, 1392, 1272}
{960, 1504, 1378, 804, 438, 1288, 748, 1098, 1548, 1488, 1320, 1558, 568, 228, 1008, 1180, 1530, 1404}
{1216, 1072, 1666, 1590, 1416, 316, 1612, 730, 1680, 600, 1716, 1342, 1302, 1720, 852, 666, 1692, 1722, 1566, 1632}
{1802, 1550, 1682, 1430, 1190, 1586, 1850, 1340, 1472, 962, 836, 1862, 1736, 332, 1872, 1620, 1880, 1886, 1760, 1892, 486, 1136, 1652, 632, 1022}
{258, 1924, 1798, 1674, 1168, 1938, 790, 1824, 1960, 1708, 1968, 1330, 1974, 1848, 1978, 574, 1600, 1474, 1224, 1740, 1870, 720, 1638, 1770, 498, 1908, 1278}
{1922, 2052, 902, 1040, 2072, 1562, 1952, 1700, 2090, 1460, 2106, 830, 1856, 2120, 1610, 972, 1742, 1232, 1106, 2132, 2006, 356, 2150, 2156, 2030, 2160, 2162, 1406}
{1794, 774, 2184, 534, 2200, 2074, 1444, 2214, 1704, 1200, 2226, 2100, 2236, 1984, 2244, 1606, 2250, 2124, 2254, 2256, 1876, 1750, 1500, 2016, 2146, 996, 1134, 1264, 2166, 1914}
{2310, 1800, 1162, 1932, 1422, 1296, 2322, 2196, 2332, 2080, 2340, 2346, 2220, 2350, 2352, 1972, 1846, 1596, 2112, 2242, 712, 460, 1360, 2262, 1752, 2010, 2280, 372, 2296, 2170}
Множество с одним элементом у нас одно - {52}
Решаем систему уравнений:
xy=52
x+y=17
Находим, что числа - 13 и 4][1]