Làm thế nào để bạn tìm thấy bộ ba pythagore trong python?

Một nút trong cây ba nguyên thủy chỉ cần m và n của nó [từ đó a, b và c được tính toán]. Thay vào đó, tôi lưu trữ các bộ dữ liệu [kc, m, n, k] trong một đống, trong đó k là hệ số nhân của bộ ba và c là c của bộ ba nguyên thủy sao cho kc là c của bộ ba được nhân. Bằng cách này, tôi nhận được tất cả các bộ ba theo thứ tự tăng [k-nhân] c. Cấu trúc cây làm cho việc mở rộng bộ ba thành bộ ba lớn hơn thực sự dễ dàng và tự nhiên. Tôi đã cố gắng làm điều gì đó như thế này với giải pháp vòng lặp của mình nhưng gặp sự cố. Cũng lưu ý rằng tôi không cần bất kỳ phép tính giới hạn sqrt xấu xí nào, không cần kiểm tra gcd và không cần đảm bảo rõ ràng rằng m+n là số lẻ [tất cả những gì tôi có trong giải pháp của câu trả lời khác]

Thử nghiệm

>>> for a, b, c in triplets[]:
        print[a, b, c]
        
3 4 5
6 8 10
5 12 13
9 12 15
15 8 17
12 16 20
...
[I stopped it here]

Vì vậy, nếu bạn muốn nhân ba lên đến một giới hạn N nhất định, bạn có thể cung cấp nó làm đối số hoặc bạn chỉ có thể đọc từ trình vòng lặp vô hạn và dừng khi bạn vượt quá giới hạn hoặc khi bạn đã có đủ hoặc bất cứ điều gì. Ví dụ: bộ ba thứ một triệu có c=531852

>>> from itertools import islice
>>> next[islice[triplets[], 10**6-1, None]]
[116748, 518880, 531852]

Quá trình này mất khoảng ba giây

Điểm chuẩn với giải pháp "vòng lặp" trong câu trả lời khác của tôi, giải pháp "tree1" không có thứ tự và giải pháp "tree2" được sắp xếp theo c

Khi cần xác định các bộ ba số Pythagore trong một phạm vi nhất định, một phương pháp được xác định, giúp tính toán các giá trị bộ ba

Dưới đây là minh họa tương tự -

Ví dụ

Bản thử trực tiếp

def pythagorean_triplets[limits] :
   c, m = 0, 2
   while c < limits :
   for n in range[1, m] :
      a = m * m - n * n
      b = 2 * m * n
      c = m * m + n * n
      if c > limits :
         break
      print[a, b, c]
   m = m + 1
upper_limit = 15
print["The upper limit is :"]
print[upper_limit]
print["The Pythagorean triplets are :"]
pythagorean_triplets[upper_limit]

đầu ra

The upper limit is :
15
The Pythagorean triplets are :
3 4 5
8 6 10
5 12 13

Giải trình

  • Một phương thức được xác định để xác định các biến để xác định giá trị cho từng bộ ba số Pythagore

  • Bên ngoài phương thức, số nguyên được xác định

  • Phương thức này được gọi bằng cách truyền số nguyên

  • Đầu ra được hiển thị trên bàn điều khiển

Tuy nhiên, trong một số trường hợp đặc biệt, cả ba cạnh sẽ có độ dài là các số nguyên. Một ví dụ phổ biến là một tam giác vuông có các cạnh 3 cm, 4 cm và 5 cm

Các số 3, 4, 5 được gọi là bộ ba số Pitago. Cụ thể, bộ ba số Pitago là tập hợp ba số nguyên dương a, b và c sao cho ba số nguyên này tạo thành các cạnh của một tam giác vuông.

Xóa?

Nhiệm vụ hôm nay là viết một chương trình bằng Python thực hiện các công việc sau.

  1. Nhắc người dùng nhập số bộ ba [n] mà họ muốn tạo.  
  2. Tạo n bộ ba đầu tiên, đảm bảo rằng không có bản sao nào

Để làm điều đó, chúng tôi sẽ sử dụng hai công thức bên dưới.

Với mọi số chẵn p,
các số p, [p/2]2 -1 và [p/2]2 + 1 tạo thành một bộ ba số Pitago.

Với mọi số lẻ q,
các số q, [q2 -1]/2 và [q2 +1]/2 tạo thành một bộ ba số Pitago.

Đây là video cho thấy chương trình hoạt động như thế nào

Giải pháp được đề xuất và toàn bộ giải pháp có thể được tìm thấy bên dưới

giải pháp đề xuất

i = 0
a = [0, 0, 0]

n = int[input['Number of triples required: ']]

while i>> from itertools import islice
>>> next[islice[triplets[], 10**6-1, None]]
[116748, 518880, 531852]
3. Toán tử
>>> from itertools import islice
>>> next[islice[triplets[], 10**6-1, None]]
[116748, 518880, 531852]
4 cho chúng ta phần dư khi chia i cho 2. Nếu phần còn lại bằng 0, chúng ta biết rằng i là số chẵn.

Tùy thuộc vào việc i là chẵn hay lẻ, chúng ta sử dụng công thức tương ứng để tính ba số nguyên tạo thành bộ ba.

Sau khi tính từng bộ ba, chúng ta kiểm tra xem số đầu tiên có nhỏ nhất trong ba số không. Nếu đúng như vậy, chúng tôi biết rằng bộ ba này là mới.

Nếu không, chúng tôi biết rằng bộ ba là trùng lặp.

Ví dụ: khi i là 3, chúng tôi nhận được bộ ba 3, 4, 5.

Tuy nhiên, khi i trở thành 4, chúng ta có bộ ba 4, 3, 5 thực sự bằng với bộ ba trước đó.

Chúng tôi có thể phát hiện sự trùng lặp này đơn giản bằng cách nhìn vào số nhỏ nhất trong 4, 3, 5. Số nhỏ nhất là 3, do đó chúng tôi biết bộ ba này đã được hiển thị khi i5.

Nói cách khác, nếu có một số nhỏ hơn số đầu tiên trong bộ ba, chúng ta biết rằng bộ ba này đã được tính trước đó.

Nếu bộ ba là mới, chúng tôi sử dụng hàm i6 để in giá trị của nó [được lưu trong danh sách a].

Hoặc, chúng tôi tăng giá trị của i8 lên 1 vì chúng tôi cần tính thêm một bộ ba để thay thế bộ ba hiện tại.

Cuối cùng, chúng ta tăng i lên 1  và để vòng lặp while chạy lại cho đến khi điều kiện a1 không còn hiệu lực.

Có công thức nào cho bộ ba số Pythagore không?

Bộ ba số Pitago bao gồm ba số nguyên dương a, b và c, sao cho a 2 + b2 = c2. Such a triple is commonly written [a, b, c], and a well-known example is [3, 4, 5].

Chủ Đề