пифагорейское упражнение троек - PullRequest
4 голосов
/ 20 октября 2010

Мне нужен быстрый совет относительно следующего вопроса об упражнении:

Напишите программу, которая генерирует все пифагорейские тройки, чьи маленькие стороны не больше n. Попробуйте это с n <= 200. </p>

что значит "не длиннее n" ??

источник упражнений: Ява от Dissection (Ира Пол и Чарли Макдауэлл)

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

EDIT

если n - длина малой стороны a, и мы говорим: n равно 5; тогда мне нужно проверить все тройки с а = 1, а = 2, а = 3, а = 4, а = 5 и найдите случаи, которые являются пифагорейскими тройками

для чего нужно это дополнительное условие?

РЕДАКТИРОВАТЬ 2

возможно, я подойду ближе, если покажу вам практический кусок ... так что вот небольшой фрагмент кода (python), который возвращает несколько троек. Я установил верхний предел для внешнего цикла равным 20 (сейчас я не вижу другого использования для 'n'), чтобы он был управляемым для поста.

import math
for b in range(20):
    for a in range(1, b):
        c = math.sqrt( a * a + b * b)
        if c % 1 == 0:
            print (a, b, int(c))

это возвращает

(3, 4, 5) (6, 8, 10) (5, 12, 13) (9, 12, 15) (8, 15, 17) (12, 16, 20)

это желаемый результат? какой шаг я пропускаю?

заранее спасибо

Баба

Ответы [ 5 ]

2 голосов
/ 20 октября 2010

Пифагорейские тройки - это целые стороны прямоугольного треугольника.Маленькие стороны треугольника - это стороны, которые образуют прямой угол (т.е. не гипотенуза).

no larger than n означает, что вы получили целое число n и должны сгенерировать все возможные тройки целых чисел a b cтакие что a <= n, b <= n и a^2 + b^2 = c^2.

1 голос
/ 21 октября 2010

Существует бесконечное количество пифагорейских троек. Поэтому, если вы не устанавливаете границы для набора триплетов для генерации, программа не может выполнить задачу за конечное время. Поэтому мы должны каким-то образом ограничить желаемый результат. Кажется, есть разногласие относительно того, относится ли поставляемая граница к самой короткой ноге или к обеим ногам. Здесь мы показываем, что ограничение самой короткой ноги подразумевает ограничение другой ноги.

Мы можем взять a <= b < c. Поскольку мы знаем, что sqrt (2) иррационально, мы можем исключить возможность того, что a = b, оставляя a < b < c. Так как в пифагорейской тройке у нас есть a^2 + b^2 = c^2, а a не равно нулю, c >= b+1 (т.е. c по крайней мере такой же большой, как самая маленькая вещь, которая может быть c). Принимая c за эту границу, мы получаем a^2 + b^2 = c^2 >= (b+1)^2, а это означает a^2 >= 2b+1 или b <= (a^2 - 1)/2.

Таким образом, оценка а также является границей b (и, следовательно, c). Подробно, если нам требуется a <= n, то нам требуется b <= (n^2 - 1)/2. Мы можем сделать вывод, что c^2 <= n^2 + (n^2 - 1)^2/4.

Граница c довольно свободна, поэтому я не рекомендовал бы зацикливаться на c, а затем отфильтровывать слишком большие треугольники.

1 голос
/ 20 октября 2010

Вопрос просто означает, что если мы примем «a», «b» и «c» в качестве сторон треугольника, а «c» - гипотенуза, то «a» и «b» оба должны быть меньше «n».

т.е. a <= n и b <= n </p>

0 голосов
/ 20 октября 2010

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

Кроме того, ваш вопрос про уточнение "чьи маленькие стороны не больше n".Предположим, что тройка есть (A, B, C), где A Тогда я бы интерпретировал требование как нахождениевсе тройки такие, что A <= n.(B и C может быть больше, чем n).Этот вопрос должен был быть более явным и содержать слово «самая короткая сторона» («самая короткая» лучше, чем «самая маленькая») или явно вызывать А и / или Б. </p>

0 голосов
/ 20 октября 2010

Там будет только конечное число PT, которые существуют, где самая длинная сторона составляет менее 200 «единиц», поэтому вы можете перебирать каждую сторону трех сторон, список целых чисел от 1 до 200 (с некоторыми тесты для ускорения процесса - это упражнение) - если они PT, - то вы нашли один (не обращайте внимания на обман).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...