Это прекрасно. Не забудь зайти получить денежную премию.
Как вы определяете алгоритм, когда с 1 начинать, а когда с 2476?
end = 20000
a_begin = # последнее число a, выведенное раньше, или 1
for a in range(a_begin, end+1):
an = a ** n
c = a; cn = an
# Для каждого значения b в интервале
for b in range(1, end+1):
anbn = an + b ** n
while anbn > cn:
c += 1
cn = (c ** n)-1
if anbn == cn: # Bingo!
print(f'{a}³+{b}³={c}³-1 | {a**3}+{b**3}={c**3}-1')
Select A from solutions limit 1 order A desc
Перепишите, пожалуйста код, как будет лучше. Как по мне вы говорите загадками и скорей всего я ответ на загадку не найду.
begin, end = 1, 20000
for a in range(begin, end+1):
an = a ** n
c = a; cn = an
# Для каждого значения b в интервале
for b in range(begin, end+1):
anbn = an + b ** n
while anbn > cn:
c += 1
cn = (c ** n)-1
if anbn == cn: # Bingo!
print(f'{a}³+{b}³={c}³-1 | {a**3}+{b**3}={c**3}-1')
Задействовать сигналы для связи между потоками кажется избыточным. В этом случае я бы использовал ожидание на condition variable.
condition_variable::wait
и condition_variable::notify_one
работают? Да даже этот интерфейс изоморфен WaitForSingleObject/SetEvent.
Конкретно в этом примере использование атомиков в сочетании с yieldом для синхронизации потоков будет самым дешевым, на мой взгляд
Хотя, безусловно, любое новое доказательство этой теоремы достойно публикации и может даже на PhD потянуть.