Как найти все пифагоровы тройки включающие число
Перейти к содержимому

Как найти все пифагоровы тройки включающие число

  • автор:

Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000] [закрыт]

Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 2 года назад .

Это сообщение было исправлено и отправлено на проверку 2 года назад , но повторное открытие сообщения провалилось:

Исходные причины закрытия не были исправлены

Пифагоровой тройка назовём тройку чисел (a, b, c), такую что a ≤ b ≤ с и a 2 +b 2 =c 2 . Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000]. Запишите в ответе количество подходящих троек, а затем – значение c для тройки, в которой сумма a+b+c максимальна. Помогите пожалуйста, код нужен на python, в ответе к заданию (5681 4988)

k = 0 for m in range(1, 5000+1): if (a < 5000) and (a ** 2 + b ** 2 == c ** 2): print(a,b,c) k += 1 print(k) 

Отслеживать
задан 5 дек 2021 в 11:52
17 1 1 серебряный знак 6 6 бронзовых знаков
А чем помочь? Про цикл for и сами можете прочитать.
5 дек 2021 в 11:59

Сейчас отредактирую вопрос и сами все увидите, я пытался делать не получается, даже сначала делал до 1000 чтобы он мне хотя бы вывел это количество пифагоровых троек, до 1000 их вроде 179 точно уже не помню, ну так вот код даже так не правильно выводит, поэтому сюда и написал

5 дек 2021 в 12:03
Не, картинки никто смотреть не будет, код вставляйте текстом.
5 дек 2021 в 12:04

все, добавил код вот смотрите, кстати еще там по заданию нужно еще вывести максимальное значение с максимальной пифагоровой тройки, получается просто через функцию ( max() ) сделать или как?

5 дек 2021 в 12:11
Что-то я не очень понимаю, какое отношение имеет этот код к этой постановке задачи
5 дек 2021 в 12:33

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Ну, я написал код, но пока вам его не покажу - это всё-таки учебное задание. Но дам подсказки:

  • перебирайте в цикле a в указанном вам диапазоне [1,5000]
  • перебирайте в цикле b , учитывая, что оно тоже должно быть в диапазоне [1,5000] и кроме того, что a
  • c перебирать не нужно, его можно вычислить зная a и b из уравнения, которое вам дано
  • вычисленное c нужно проверить на попадание в диапазон и на то, что получилось вообще целое число
  • если c получилось подходящее - увеличивайте счётчик, кроме того, сравните получающееся a+b+c с ранее запомненным значением (сначала запомните 0, как и в счётчик), если оно больше - запомните его и запомните c
  • после окончания циклов выведите значение счётчика и запомненного c

Вышеуказанные два вложенных цикла + логика внутри них работают 8 секунд в Google Colab, этого вполне достаточно, чтобы дальше код можно было особо не оптимизировать.

Вот если бы было три вложенных цикла по 5000 значений, то это бы работало конкретно долго.

P.S. Ответ у меня сошёлся с указанным в задании.

Ну раз GrAnd выложил код, добавлю и я свой. Он прям "в лоб" написан, без особых оптимизаций, разве что из цикла я вынес a ** 2 и перебор b прерываю, если c вышло из диапазона. В функцию вынесено, чтобы можно было при желании обернуть в numba.njit :

def find(): count = 0 max3 = 0 max_c = 0 for a in range(1, 5001): a2 = a * a for b in range(a, 5001): b2 = b * b c = (a2 + b2) ** 0.5 if c > 5000: break if c == int(c): count += 1 if a+b+c > max3: max3 = a+b+c max_c = c return count, int(max_c) print(find()) 

Найти первые N «примитивных пифагоровых» троек

Author24 — интернет-сервис помощи студентам

Найти первые N «примитивных пифагоровых» троек (a^2+b^2=c^2) (возможны
разные варианты, поэтому в комментариях к задаче описать какой именно
алгоритм Вы используете). Примитивные пифагоровы тройки содержат взаимно простые числа, то есть, 3, 4, 5 — это примитивная пифагорова тройка, а 9, 12, 15 — нет.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Найти 20 первых троек пифагоровых чисел, то есть целых k, l, m таких, что k^2+l^2=m^2
Разработать алгоритмы решения задач. Выполнить их графическое описание с помощью блок схемы и с.

Поиск пифагоровых троек
Помогите пожалуйста написать программу поиска пифагоровых троек, используя следующие формулы.

В одномерном массиве проверить наличие Пифагоровых троек
Добрый вечер. Никак не получается решить данную задачу. Буду благодарен за помощь в решении. В.

Поиск Пифагоровых троек: оптимизация кода по скорости
Помогите усовершенствовать код, чтобы он выполнялся быстрее. Если вкратце, то тут идёт поиск.

Формулы для нахождения Пифагоровых троек/ ТЕМА ЗАКРЫТА

Пожалуйста, используйте IE6/7/8 с плагином MathPlayer, Firefox с установленными математическими шрифтами или Opera 9.5 и выше.

Объявления Последний пост
Работодателям и кадровым агентствам: Размещение вакансий 26.03.2008 03:07
Книги по математике и экономике в добрые руки! 07.10.2023 13:49
ML Research Engineer, до $8k/мес net 26.01.2024 09:15

30.10.2013 18:29
Дата регистрации:
14 лет назад
Посты: 13 190
Сплошное вранье.

Цитата
korsakov
.
Я привел универсальную и очень простую формулу.
По ней можно составить простенькую компьютерную программу и по ней производить
расчеты для любого количества чисел сколько хватит терпения. По итогам таких расчетов
можно составить бесконечно большой список чисел, которые не могут быть наибольшими
в пифагоровых тройках.

А я примером доказал, что приведенная формула - бред.
30.10.2013 18:41
Дата регистрации:
16 лет назад
Посты: 3 635
ответ не получен!

Цитата
korsakov
Товарищ не понимает.
Я же подчеркнул, что не все числа могут быть наибольшими в пифагоровой тройке.
К таким числам относится и число $3$ ,
Некоторые вопреки предупреждению модератора норовят хамить.

Я привел универсальную и очень простую формулу.
По ней можно составить простенькую компьютерную программу и по ней производить
расчеты для любого количества чисел сколько хватит терпения. По итогам таких расчетов
можно составить бесконечно большой список чисел, которые не могут быть наибольшими
в пифагоровых тройках.

Вы нее ответили на вопрос.
Повторяю.
Можете ли Вы сформулировать полное описание тех чисел, которые могут быть наибольшими в Пифагоровой тройке?
Иначе, что Ваша компьютерная программа будет считать? Вот, дали Вам какое-то нечетное число. Какие действия Вы с ним станете производить, чтобы узнать, может это число быть наибольшим, или нет.

Теперь вопрос понятен?

30.10.2013 18:51
Модератор
Дата регистрации:
10 лет назад
Дисциплинарная ситуация.

Уважаемый korsakov!
Вам задан прямой вопрос. Администрация требует, чтобы Вы дали на него содержательный, прямой и обоснованный ответ, либо признались в неспособности дать таковой.

При уловках или отказе дать прямой ответ либо признание к Вам могут быть применены дисциплинарные меры.

Уважаемая shwedka.
Вам предлагается, после получения ответа от korsakov, дать свой прямой, содержательный и обоснованный ответ на свой вопрос, либо признаться в неспособности дать таковой.

При уловках или отказе дать прямой ответ либо признание к Вам могут быть применены дисциплинарные меры.

30.10.2013 19:06
Дата регистрации:
10 лет назад

Ответ на этот вопрос простой. Надо решить сиё Диофантово уравнение $X^2+Y^2=Q$
Я как подозреваю ни Шведка ни Корсаков его решить не могут. Вот и ругают друг друга!
Вот смешная ситуация!

30.10.2013 19:15
Модератор
Дата регистрации:
10 лет назад
Дисциплинарная ситуация-2

Уважаемый individ!
Поскольку Вы неприглашенно вмешались в дисциплинарную ситуацию, она теперь к Вам тоже относится.

Предложите свое полное решение обсуждаемого диофантова уравнения $X^2+Y^2=Q$
либо признайтесь, что этого сделать не можете. При отказе от ответа или признания, либо уловках, к Вам будут применены дисциплинарные меры.

Редактировалось 2 раз(а). Последний 30.10.2013 19:20.

30.10.2013 22:20
Дата регистрации:
10 лет назад

К этому вопросу подойти можно двояко, с одной стороны если бы формула описывающая их решения существовала, то при любом каком нибудь заданном параметре она бы давала решения. То есть либо формула есть, тогда решений бесконечно много. Либо решений конечное число и формулы нет, что и проявляется тут.
Если бы это было так просто то было хорошо. Оказывается сложнее, если мы возьмём похожее уравнение Пелля $X^2-qY^2=a$ то написать формулу описывающее все его решения мы не сможем. Можно будет по известному одному решению по цепочке найти все следующие решения. То есть нужно знать первое решение, а его можно найти разлагая q на цепные дроби или использовать перебор. Мне больше перебор устраивает так проще.
Теперь если будем решать уравнение $X^2+Y^2=Q$ в лоб мы придём к тому же уравнению.
Эти два уравнения похожи между собой тем, что являются единицами измерения решений большого класса уравнений. Причём для написания формул решений других уравнений они выступают как минимальные единицы измерений. При решений других уравнений их решения выражаются через них. Меньше их не может быть.
Конечно неприятно, что для этих уравнений написать формулу нельзя, но нет худа без добра. При решении некоторых уравнений и записи формулы решения очень компактно выглядит это всё в записи через корни уравнения Пелля например.
Так что пытались найти то, что в принципе не существует.

30.10.2013 22:27
Дата регистрации:
14 лет назад
Посты: 3 155
фтопку тему. в сам деле.
30.10.2013 23:29
Модератор
Дата регистрации:
10 лет назад
Строгое предупреждение.

individ, Ваше длинное послание принимается как отказ дать четкий ответ на поставленный вопрос, вызванный Вашим вмешательством.
Строгое предупреждение. В следующий раз, когда будете делать заявления, которые не сможете обосновать, двухнедельный бан.

31.10.2013 13:23
Дата регистрации:
11 лет назад
По-моему, я все объяснил

Уважаемый m.oderator,
я привел формулу $M=\sqrt$ .
С ее помощью, принимая значения числа $X$ в пределах $1, 2, ,3. (N-1)$ ,
можно убедиться, является ли заданное число $N$ наибольшим в пифагоровой тройке или нет.
Я понимаю, что для больших чисел расчет утомительный, но для любознательных и настойчивых преград нет.
Как говорится, дорогу осилит идущий.
Я подчеркнул, что не все числа могут быть наибольшими в пифагоровой тройке.
Это легко устанавливается по приведенной формуле.
Других формул, позволяющих легко и быстро все это установить, я не знаю.
Заданный вопрос, по-моему, чисто риторический: я не думаю, что имеет практический смысл
установление факта того, является или не является какое-либо число наибольшим в пифагоровой тройке.

Редактировалось 2 раз(а). Последний 31.10.2013 13:29.

31.10.2013 13:29
Дата регистрации:
14 лет назад
Посты: 13 190
Разве тут можно хоть что-то понять?

Цитата
korsakov
Уважаемый m.oderator,
я привел формулу $M=\sqrt$ .
С ее помощью, принимая знгачения числа $X$ в пределах $1, 2, ,3. (N-1)$ ,
можно убедиться, является ли заданное число $N$ наибольшим в пифагоровой тройке или нет.
Я понимаю, что для больших чисел расчет утомительный, но для любознательных и настойчивых преград нет.
Как говорится, дорогу осилит идущий.
Я подчеркнул, что не все числа могут быть наибольшими в пифагоровой тройке.
Это легко устанавливается по приведенной формуле.
Заданный вопрос, по-моему, чисто риторический: я не думаю, что имеет практический смысл
установление факта того, является или не является какое-либо число наибольшим в пифагоровой тройке.

Написана некоторая формула, но не написано, как именно проверять. Вот я разобраться не смог.
Это явная отписка, алгоритм проверки не описан и не может быть восстановлен, поскольку нет никаких рассуждений, выкладок или доказательств.

31.10.2013 13:40
Дата регистрации:
11 лет назад
Каждому свое

Не разобрался - значит не разобрался.
Алгоритм расчета простой:
задался числом $ N$ ;
принимая значения числа $X$ в пределах $1, 2, 3. (N-1)$ ,
определяешь число $M$ ;
если в результате расчетов число $M$ получится целым, значит число $ N$
является наибольшим в пифагоровой тройке, а если все числа $M$ получаются дробными,
значит число $ N$ не является наибольшим в пифагоровой тройке.

31.10.2013 14:06
Дата регистрации:
14 лет назад
Посты: 13 190
Трудно придуматьб бОльшую банальность.

Цитата
korsakov
Не разобрался - значит не разобрался.
Алгоритм расчета простой:
задался числом $ N$ ;
принимая значения числа $X$ в пределах $1, 2, 3. (N-1)$ ,
определяешь число $M$ ;
если в результате расчетов число $M$ получится целым, значит число $ N$
является наибольшим в пифагоровой тройке, а если все числа $M$ получаются дробными,
значит число $ N$ не является наибольшим в пифагоровой тройке.

Так любой 8-миклассник может.
Если $l^2+m^2=n^2$ то для одного из $ m=1, 2 , . n-1$ число $\sqrt$ будет натуральным.
Более того, сообразительный восьмиклассник догадается в $\sqrt$ раз уменьшить перебор, считая, что $mБанальность, с умным видом изреченную козьим, никак нельзя считать описанием бОльших элементов в пифагоровых тройках, поскольку он свел все к рутинному перебору, эквивалентному определению пифагоровой тройки..
Предлагаю закрыть данную тему как злостный оффтопик, не относящийся к тематике форума (подобный детский лепет достоин занятия по алгебре в 8-м классе, а не обсуждения на площадке мех-мата), а самого козьего - забанить как спамера, зарегистрированного здесь сразу под несколькими учетными записями.

Редактировалось 1 раз(а). Последний 31.10.2013 14:08.

31.10.2013 14:38
Дата регистрации:
14 лет назад
Представление
Цитата
Корсаков
Однако не все числа могут быть наибольшими в пифагоровой тройке, например 7,11

Совершенно верное утверждение! Это обычные простые числа. Установить, что это верно можно простым перебором и установить, что каждое и этих чисел не представимо в виде суммы квадратов двух целых взаимно простых чисел каждое. После этого можно понять, что и их произведение, то есть число $77$ так же не представимо в виде суммы двух квадратов. В то же время можно понять, что достаточно взять любое верное для простого числа равенство, например $5=2^2+1^2$ , то при этом мы получим и выполняющееся равенство $5^2=3^2+4^2$ , а затем и верное равенство $(7*5)^2=21^2+28^2$ . Так как простых чисел, представимых в виде суммы квадратов бесчисленное количество, то и количество чисел содержащих в своём разложении числа 7; 11; 77 представимых в виде суммы двух квадратов, бесчисленное количество. Но, теперь я полагаю , Вы представляете сколько труда необходимо затратить, чтобы доказать, что одно ПРОИЗВОЛЬНОЕ целое число представимо или не представимо в виде суммы двух квадратов.
Ведь при этом вначале надо либо разложить его на простые множители, либо установить что оно не разложимо - простое. Для не простого надо исследовать все простые делители на предмет представления каждого из делителей в виде суммы квадратов двух простых чисел. Если ни один простой делитель не представим в виде суммы квадратов, то и всё число не представимо в таком виде, а если хоть один делитель представим в виде суммы двух квадратов то и всё число представимо в таком виде. Но это не главная трудность.. Главная трудность состоит в том , что я нигде не встречал описания способа решения в общем виде задачи представления любого конкретного простого числа в виде суммы квадратов двух взаимно простых целых чисел.

Цитата
Shwedka
A можете ли Вы сформулировать полное описание тех чисел, которые могут быть наибольшими в Пифагоровой тройке. Так, что бы взглянул на число, и понял, нет, не может, или, да, может!

Я , основываясь на сказанном выше, отвечаю – нет. И никто не может и никогда не сможет!
а) Я полагаю, что вопрос у shwedki родился на основании известной байки – Великий Эйлер буквально мимоходом заметил, что П.Ферма ошибся, утверждая, что число
$2^+1$ - простое. И назвал два его делителя. Попробуйте представить себе каких трудов ему это стоило в свете сказанного мной выше в условиях отсутствия вычислительной техники .
б) По моему, говорить о максимальном числе тройки Пифагора – бессмысленно. Ведь если равенству Пифагора удовлетворяет тройка положительных чисел $z;x;y$ , то ему удовлетворяет ещё и любая тройка из множества троек $(z;x;-y);( z;-x;y); -z;x;y);(-z;-x;y);(-z;x;-y);(-z;-x-y)$ , и в каждой тройке имеется своё наибольшее число. В этом главное отличие в свойствах чисел тройки Пифагора и тройки чисел Ферма, если бы таковая существовала.
Любарцев В.В.

Редактировалось 2 раз(а). Последний 31.10.2013 14:54.

Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000]?

Пифагоровой тройка назовём тройку чисел (a, b, c), такую что a ≤ b ≤ с и a2+b2=c2. Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000]. Запишите в ответе количество подходящих троек, а затем – значение c для тройки, в которой сумма a+b+c максимальна.
Помогите пожалуйста, код нужен на python, в ответе к заданию (5681 4988)

  • Вопрос задан более двух лет назад
  • 3024 просмотра

2 комментария

Простой 2 комментария

AnanasMaks @AnanasMaks Автор вопроса
AnanasMaks @AnanasMaks Автор вопроса
zero exception, да это егэ
Решения вопроса 0
Ответы на вопрос 4

Vindicar

Не пойму почему делаете так. Можно куда проще.
Можно сгенерировать список квадратов чисел:
squares = [i*i for i in range(1, 5001)]
При этом индекс элемента в списке i всегда будет на один меньше, чем число, чей квадрат находится по индексу i.
Теперь задача переформулируется таким образом: найти все пары чисел из этого списка, сумма которых тоже в этом списке.

for a,a2 in enumerate(squares, 1): for b,b2 in enumerate(squares[a:], a+1): if (a2+b2) in squares: c = squares.index(a2+b2) + 1 print(a,b,c)

Работает не очень быстро, но работает.

EDIT: можно резко ускорить код, если учесть следующее: нам не обязательно искать сумму во всем списке. Мы знаем, что сумма будет больше чем b^2, т.е. будет иметь индекс больше чем b. Также мы знаем, что a^2 + b^2 < (a+b)^2, т.е. сумма будет иметь индекс меньше чем a+b. Отсюда:

for a,a2 in enumerate(squares, 1): for b,b2 in enumerate(squares[a:], a+1): if (a2+b2) in squares[b+1:a+b]: c = squares.index(a2+b2) + 1 print(a,b,c)

Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать

trapwalker

Сергей П @trapwalker Куратор тега Python
Программист, энтузиаст

Начните с самого простого не оптимизированного решения:
Вам нужно перебрать все целые A от 1 до 5000. Для каждого такого A вы можете перебрать все целые B от A+1 до 5000. Если корень из суммы их квадратов - целое число, то это, очевидно, тройка пифагора. Но вам нужно, чтобы C было меньше или равно 5000.
Для отимизации вы можете не спешить извлекать корень, а сперва проверить его на превышение 5000*"2. Так вы немного сэкономите. Ещё вы каждый раз можете вычислять правую границу внутреннего цикла, так вы будете искать решение среди вдвое меньшего количества вариантов.
Не знаю какие там требования сейчас по эффективности решения задачь, но для школьников такое решение я бы считал приемлемым. Да и не для школьников. Хотя н апитоне такая задача будет считаться с десяток секунд без оптимизаций. Однако временнЫе ограничения не были озвучены. Эдак и методом Монтекарло можно решать=)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *