# Это программа на 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)
Хотя кубический корень из вещественного числа можно вычислить методом половинного деления или ньютона.Нет, я не справлюсь с домашним заданием. Давайте подождем, мало ли, может кто-то придет и решит.
if((a**3 + b**3) / 2 == (c**3) / 2):
моя, я не просил Bing написать ее. # Создаем таблицу
cur.execute("CREATE TABLE IF NOT EXISTS sums (a INTEGER, b INTEGER, c INTEGER, a_cubed INTEGER, b_cubed INTEGER, c_cubed INTEGER, sum INTEGER, half_sum REAL, Begin INTEGER, End INTEGER)")
# Задаем диапазон значений для a, b и c
Begin = 1
End = 20001
# Вставляем данные в таблицу
for a in range(Begin,End):
for b in range(Begin,End):
for c in range(Begin,End):
if((a**3 + b**3) / 2 == (c**3) / 2):
a_cubed = a**3
b_cubed = b**3
c_cubed = c**3
sum_ab = a_cubed + b_cubed
half_sum_ab = sum_ab / 2
# Выводим решение
print (a, b, c)
# Если да, то вставляем решение и пределы в таблицу sums
cur.execute("INSERT INTO sums VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (a, b, c, a_cubed, b_cubed, c_cubed, sum_ab, half_sum_ab, Begin, End))