то запускаетесь опять от 1По какому признаку мне понять, что нужно запуститься с 1?
Да, первые 10000 пар вы просмотрите опятьНеприятно конечно, но потом если что из базы удалю дубликаты.
то начало внешнего цикла можно сделать 2476Как вы определяете алгоритм, когда с 1 начинать, а когда с 2476?
я привел кодСпасибо!!! Приведите пожалуйста несколько примеров (циклов, интервалов) чтобы было понятно. Код без интервалов теряет смысл. Вопрос не про код, формула и код могут быть разными, вопрос именно про интервалы. Вы показали один интервал, одного интервала мало, меня интересует разбивка интервалов.
begin, end = 1, 20001
begin, end = 1, 1001
begin, end = 823, 3001
begin, end = 2820, 12001
Ферштейн?Страшно сказать что не verstehen. Обычно когда часто говоришь, что глупс, у собеседника начинается агрессия. По этому не признаюсь.
наискосокИз вариантов: вдоль, в поперек, по диагонали или по частям, я предпочитаю даже не нож, а мясорубку, т.е. по частям.
Ничего вы не срезали. А всего-лишь чуть-чуть поменяли порядок перебора все тех же пар чисел, сильно усложнив кодПерепишите, пожалуйста код, как будет лучше. Как по мне вы говорите загадками и скорей всего я ответ на загадку не найду.
Почитай вообще литературу как тестируется ПО. Краевые тесты. Property-based testingСпасибо.
Ты пишешь в принципе получилось. А как ты докажешь что учел ВСЕ сочетания целых чисел?Я же сделал 40 циклов, раньше была недостача после маленьких циклов, теперь ее нет:
я ума не приложу какие запросы тебе там
нужны и почему ты просто не мог поискать это в тексте
Сделай один Range полным-полным перебором. Потом внеси оптимизацию
Здесь срезать углы не получиться
Долгоиграющие джобы можно разбить на итерации. Или пачки. В данном случае пачкой будут Ranges.
И выбрать такой интервал чтоб не сильно долго работала пачка (5 минут) и в тоже время чтоб можно было оперативно прервать без жалости.
И завести табличку ranges. Пачка троек отработала - закоммитил.
При следующем запуске мы начинаем не с начала а со следующей пачки.
Честно я-бы для этой задачи базами не парился. Тут хвататет CSV файлов.
Приведенный вами код непонятно зачем интервалы использует. С тем же успехом можно гнать просто 2 цикла от 1 до 20000 для a и b.Мне же нужно было попробовать один большой интервал и много маленьких, чтобы увидеть потери.
# Это программа на Python
import itertools
n= 3
# Задаем интервалы значений для a,b,c
intervals = [(1 + i * 1000, 1001 + i * 1000) for i in range(20)]
# Создаем все возможные комбинации интервалов для a и b
interval_pairs = itertools.product(intervals, repeat=2)
# Для каждой пары интервалов
for (a_begin, a_end), (b_begin, b_end) in interval_pairs:
# Для каждого значения a в интервале
for a in range(a_begin, a_end+1):
an = a ** n
c = a; cn = an
# Для каждого значения b в интервале
for b in range(b_begin, b_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 | {a_begin} {a_end} {b_begin} {b_end}')
# Это программа на Python
# Импортируем модуль sqlite3
import sqlite3
# Подключение к базе данных SQLite
conn = sqlite3.connect('solutions1.db')
# Создаем таблицу solutions в базе данных
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS solutions (a INT, b INT, c INT, a_cube INT, b_cube INT, c_cube INT, begin INT, end INT)")
n= 3
# Задаем интервалы значений для a,b,c
intervals = [(2, 20001)]
#intervals = [(2, 1001), (1000, 2001), (2000, 3001), (3000, 4001), (4000, 5001), (5000, 6001), (6000, 7001), (7000, 8001), (8000, 9001), (9000, 10001), (10000, 11001), (11000, 12001), (12000, 13001), (13000, 14001), (14000, 15001), (15000, 16001), (16000, 17001), (17000, 18001), (18000, 19001), (19000, 20001)]
# Перебираем значения из списка intervals и для каждого интервала генерируем значения a,b,c такие,
# что a³+b³=c³+1. Если такие значения найдены, то они выводятся на экран и записываются в таблицу solutions.
for Begin, End in intervals:
for a in range(Begin, End+1):
an= a ** n
c= a; cn= an
for b in range(a+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 | {Begin} {End}')
# Записываем решение и пределы в таблицу solutions
cur.execute("INSERT INTO solutions VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (a, b, c, a**3, b**3, c**3, Begin, End))
# Сохраняем изменения в базе данных
conn.commit()
# Закрываем соединение с базой данных SQLite
conn.close()
Я думаю, вам стоит вообще внешний цикл убрать и всегда работать только с одним интервалом.А если я захочу перезагрузить компьютер, а интервал ещё не досчитался?
Можно чуть чуть ускорить решение, если не увеличивать c в цикле, а вычислить его по формуле (an+bn-1)^(1/n)Спасибо, попробую, надеюсь получиться. Вначале хочу разобраться с интервалом.
Какая-нибудь функция pow вам поможетЯ экспериментировал с pow и math.pow, оказалось, что ** работает быстрее.
не из заданного интервалаДа, я знаю, можете переписать мою программу для создания интервала, а то для меня это сложно. Всего одну строчку:
intervals = [(10000 + i * 1000, 11001 + i * 1000) for i in range(10)]
print(intervals)
Хотя кубический корень из вещественного числа можно вычислить методом половинного деления или ньютона.Нет, я не справлюсь с домашним заданием. Давайте подождем, мало ли, может кто-то придет и решит.
Я уже доказал теорему Ферма с помощью эллиптических кривых. Зашел на сайт Wolfram Alpha, сказал калькулятору:
elliptic curve a^3+b^3=c^3
илиa^3+b^3=c^3
илиPower[a,3]+Power[b,3]=Power[c,3]
илиa^3 + b^3 - c^3 = 0
И он посчитал:
a = 0, c = b
b = 0, c = a
b = -a, c = 0
Wataru, У меня только что электричества не было, это знак наверное - пора заканчивать.
Да, конечно посмотрю, по тестирую. Но по этому вопросу я вас больше мучить не буду. Спасибо вам огромное, за помощь и терпение!!!