Bài tập  /  Bài đang cần trả lời

Giải bài có thưởng!

Viết chương trình tìm ước chung lớn nhất

  • BÀI TẬP
  • NỘP BÀI
  • BẢNG CHẤM BÀI SH04T.TR
  • CÁC LẦN BẠN NỘP
SH04T.Tr - Ước chung lớn nhất _SH04T.Tr

Dữ liệu vào: standard input
Dữ liệu ra: standard output
Giới hạn thời gian: 1.0 giây
Giới hạn bộ nhớ: 128 megabyte
Đăng bởi: admin
GCD lớn nhất                         Tên file: GCDMAX.CPP hoặc GCDMAX.PY

Hãy xem xét tất cả các số nguyên trong phạm vi từ 1 đến n.

Trong số tất cả các cặp số nguyên phân biệt trong phạm vi này, hãy tìm ước số chung lớn nhất có thể có của các số nguyên trong cặp. Về mặt hình thức, hãy tìm giá trị lớn nhất của gcd (a, b) (ước chung lớn nhất của a và b), trong đó 1 ≤ a <b ≤ n.

Input: GCDMAX.INP:

  • Dòng đầu tiên chứa số nguyên dương t (t ≤ 100), số lượng các trường chợp cần xét
  • t dòng tiếp theo, mỗi dòng chứa 1 số nguyên dương n (2 ≤ n ≤ 106)

Output: GCDMAX.OUT:

  • gồm t dòng, mỗi dòng chứa số nguyên dương là ước số chung lớn nhất của ước số chung lớn nhất của các cặp số thuộc đoạn [1, n]

Ví dụ:

GCDMAX.INP

GCDMAX.OUT

 

2

3

5

1

2

Giải thích:

- ở trường hợp 1: n = 3, ước chung lớn nhất của mọi cặp (a, b) ≤ n là: gcd(1,2) = gcd(1,3) = gcd (2,3) = 1 nên kết quả là 1.

- ở trường hợp 2: n = 5, ước chung lớn nhất của mọi cặp (a, b) ≤ n là: gcd(1,2) = gcd(1,3) = gcd(1,4) = gcd(1,5) = gcd(2,3) = gcd(2,5) = gcd (3,4) = gcd(3,5) = gcd(4,5) = 1, gcd(2, 4) = 2 nên kết quả là 2.

0 Xem trả lời
Hỏi chi tiết
66
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Để giải quyết bài toán về việc tìm ước chung lớn nhất (GCD) của tất cả các cặp số nguyên phân biệt trong khoảng từ 1 đến n, ta có thể nhận thấy một điều quan trọng: Giá trị lớn nhất của GCD giữa các cặp số phân biệt \( (a, b) \) dưới \( n \) thực ra chỉ phụ thuộc vào các số chẵn.

Cụ thể, khi \( n \) là số lớn nhất ở mức \( 10^6 \), GCD lớn nhất giữa tất cả các cặp số sẽ là giá trị lớn nhất ta có thể tìm thấy từ tất cả các số chẵn dưới \( n \). Điều này xảy ra do mỗi số chẵn có thể chia cho 2, do đó GCD giữa nó với một số lẻ hoặc số khác có thể là 2 nếu đó là số chẵn.

### Bước thực hiện:
1. Đọc số lượng trường hợp thử nghiệm t và giá trị n cho từng trường hợp.
2. Kiểm tra xem n là số chẵn hay lẻ.
3. Nếu n là số chẵn, GCD lớn nhất là n. Nếu n là số lẻ, GCD lớn nhất là \( n - 1 \).

### Code mẫu Python

Dưới đây là mã nguồn Python để thực hiện giải thuật trên:

```python
def gcd_max(n):
if n % 2 == 0:
return n
else:
return n - 1

def main():
import sys
input = sys.stdin.read
data = input().split()

t = int(data[0]) # đầu vào số lượng trường hợp
results = []
for i in range(1, t + 1):
n = int(data[i])
results.append(gcd_max(n))

# in kết quả
for result in results:
print(result)

if __name__ == "__main__":
main()
```

### Phân tích:
- Hàm `gcd_max(n)` trả về GCD lớn nhất giữa các cặp số từ 1 đến n. Nếu n chẵn, trả về n. Nếu lẻ, trả về \( n - 1 \).
- Chương trình đọc t và các giá trị n từ đầu vào.
- Kết quả đưa ra theo từng dòng.

### Ví dụ sử dụng:
Khi chạy chương trình với đầu vào:
```
2
3
5
```
Kết quả sẽ là:
```
2
4
```
- Trường hợp n = 3: GCD_MAX là 1.
- Trường hợp n = 5: GCD_MAX là 2.

Chương trình hoạt động hiệu quả với giới hạn cho phép và sử dụng ít bộ nhớ.

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×