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

Hai số tự nhiên m và n được gọi là hai số bạn bè nếu tổng các ước thực sự của n bằng m. Hãy viết chương trình tìm các cặp số bạn bè nhỏ hơn số n cho trước

Bài 4: Hai số tự nhiên m và n được gọi là hai số bạn bè nếu tổng các ước thực sự của n bằng m. Hãy viết chương trình tìm các cặp số bạn bè nhỏ hơn số n cho trước.

Ví dụ: 283 và 220 là cặp số bạn bè vì tổng các ước thực sự của:’

          220 là: 2+4+5+10+11+20+22+44+55+110 = 283

1 Xem trả lời
Hỏi chi tiết
105
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Để tìm các cặp số bạn bè nhỏ hơn một số \( n \) cho trước, ta cần thực hiện các bước sau:

1. **Viết hàm tính tổng các ước thực sự** của một số \( m \).
2. **Duyệt qua các số từ 1 đến \( n-1 \)**, tính tổng các ước thực sự của mỗi số.
3. **So sánh** tổng các ước thực sự với số đó để kiểm tra xem liệu nó có phải là số bạn bè hay không.
4. **Kiểm tra** xem số mà ta tìm được (số bạn bè) có thể được tìm lại thông qua tổng ước thực sự của nó hay không.

Dưới đây là một đoạn mã Python thực hiện các bước trên:

```python
def sum_of_proper_divisors(m):
total = 0
for i in range(1, m // 2 + 1):
if m % i == 0:
total += i
return total

def find_amicable_numbers(n):
amicable_pairs = []
checked = set()

for m in range(1, n):
if m not in checked:
sum_m = sum_of_proper_divisors(m)
sum_n = sum_of_proper_divisors(sum_m)

if sum_n == m and m != sum_m:
amicable_pairs.append((m, sum_m))
checked.add(m)
checked.add(sum_m)

return amicable_pairs

# Nhập số n từ người dùng
n = int(input("Nhập số n: "))
amicable_numbers = find_amicable_numbers(n)

print("Các cặp số bạn bè nhỏ hơn số", n, "là:")
for pair in amicable_numbers:
print(pair)
```

### Giải thích mã nguồn:
1. **Hàm `sum_of_proper_divisors`**: Tính tổng các ước thực sự của số \( m \) (các số chia \( m \) mà không bao gồm chính nó).
2. **Hàm `find_amicable_numbers`**: Duyệt từ 1 đến \( n-1 \), tính tổng các ước thực sự cho từng số. Kiểm tra xem tổng đó có tạo thành cặp với số ban đầu hay không và tránh lặp lại số đã kiểm tra.
3. **Nhập từ bàn phím**: Người dùng nhập vào số \( n \) và chương trình sẽ in ra các cặp số bạn bè nhỏ hơn \( n \).

Chạy chương trình và nhập giá trị cho \( n \) sẽ giúp bạn tìm ra các cặp số bạn bè.
1
0
Thu Phươngg
20/11 20:19:22

def sum_of_proper_divisors(n): """Tính tổng các ước thực sự của n""" sum_divisors = 1 # Ước 1 luôn có for i in range(2, int(n ** 0.5) + 1): if n % i == 0: sum_divisors += i if i * i != n: sum_divisors += n // i return sum_divisors

def find_amicable_pairs(n): """Tìm các cặp số bạn bè nhỏ hơn n""" for i in range(1, n): sum_i = sum_of_proper_divisors(i) if sum_i <= n and sum_of_proper_divisors(sum_i) == i and sum_i != i: print(f"({i}, {sum_i})")

n = int(input("Nhập số n: ")) find_amicable_pairs(n)

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

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
×