2010-10-20 2 views
4

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

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

Что такое «не больше, чем n»?

источник упражнения: Java иссечения (Ira Поле и Чарли Макдауэлл)

примечание: я нашел то, что выглядит очень хорошо post on pythagorean triples но я не читал еще, как это может испортить мою попытку решить эту проблему сам ....

EDIT

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

что это дополнительное условие хорошо?

EDIT 2

может быть, я буду ближе, если я покажу вам практическую часть ... так вот короткий кусок (питон) код, который возвращает несколько троек. Я установил верхний предел для внешнего цикла равным 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)

является то, что желаемый выход? что такое шаг, который мне не хватает?

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

Баба

+1

'Попробуйте с n <= 200.' не поможет? – SilentGhost

+0

Для 0

ответ

2

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

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

+0

ok, так что если я беру тройку (3,4,5), значит, что n находится в диапазоне от 1 до 3? Какой смысл в n? или по-другому: имеет ли она цель помимо самого упражнения? Я думаю, Ричард объясняет это выше ... нужно подумать об этом, но, тем не менее, спасибо – raoulbia

+0

Проблема в том, что вопрос несколько неоднозначен. Множество «s» в «маленьких сторонах» может относиться к одной маленькой стороне для каждого из множественных пифагорейских троек. –

+0

@Baba: нет, для вашего примера (3,4,5) n находится в диапазоне от 1 до 4, так как две меньшие стороны равны или равны 4. –

1

вопрос просто означает, что если мы будем считать, «а», «B» и «с» в качестве сторон треугольника и «с» является гипотенузой, то «а» и 'b' оба должны быть меньше, чем n.

т.е. < = п и б < = п

+0

« Маленькие стороны »- я бы интерпретировал ' a 'как маленькая сторона. –

+1

Вы должны исправить свои неравенства, они определенно «<=» не «<». (3 не больше 3, поэтому равенство удовлетворяет требованию.) –

+0

Я согласен с Джейсоном,' n 'относится к' a 'как к маленькой стороне каждой тройки – raoulbia

0

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

+0

это метод грубой силы. Есть эффективный способ сделать это. –

0

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

Кроме того, ваш вопрос о разъяснении «чьи небольшой стороны не являются больше п». Предположим, что тройка равна (A, B, C), где A < B < C. (C - гипотенуза, A - более короткая сторона, B - более длинная сторона)

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

1

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

Мы можем принять 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.

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

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

Смежные вопросы