LH Quảng cáo: lazijsc@gmail.com

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

Hai số nguyên được gọi là bạn bè nếu tổng các ước số thực sự (kể cả 1) của số này bằng số kia và ngược lại. Chẳng hạn, số 220 có các ước số thực sự là: 1; 2; 4; 5; 10; 11; 20; 22; 44; 55; 110

Mọi người ơi giúp mình bài này vs đc k ạ: Hai số nguyên được gọi là bạn bè nếu tổng các ước số thực sự (kể cả 1) của số này bằng số kia và ngược lại.
Chẳng hạn, số 220 có các ước số thực sự là: 1 2 4 5 10 11 20 22 44 55 110.
Tổng các ước số trên là 284.
Số 284 có các ước số thực sự là: 1 2 4 71 142.
Tổng các ước số trên là 220.
Vậy 220 và 284 là hai số bạn bè.
Yêu cầu: Tìm tất cả các số bạn bè trong một miền cho trước Dựa trên ngôn ngữ python mà không sử dụng đọc và ghi file
 
1 trả lời
Hỏi chi tiết
32
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Để tìm các cặp số bạn bè trong một miền cho trước bằng Python, bạn có thể sử dụng chức năng sau đây. Hàm này sẽ tính tổng các ước số thực sự của một số và sau đó kiểm tra xem tổng này có tạo thành cặp bạn bè với số còn lại hay không.

Dưới đây là mã Python để thực hiện điều đó:

```python
def sum_of_divisors(n):
if n < 2:
return 0
total = 1 # 1 is a divisor for all n > 1
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
total += i
if i != n // i: # Add the corresponding divisor
total += n // i
return total

def find_friend_numbers(limit):
friend_numbers = []
for num in range(2, limit + 1):
sum_div = sum_of_divisors(num)
if sum_div > num: # Ensure we only check each pair once
if sum_of_divisors(sum_div) == num:
friend_numbers.append((num, sum_div))
return friend_numbers

# Thay đổi giá trị của 'limit' theo miền bạn muốn
limit = 300
friend_pairs = find_friend_numbers(limit)

for pair in friend_pairs:
print(f"Cặp số bạn bè: {pair[0]} và {pair[1]}")
```

### Giải thích mã:

1. **`sum_of_divisors(n)`**: Hàm này tính tổng các ước số thực sự của `n`. Nó bắt đầu với tổng là 1 (vì 1 luôn là ước số) và sử dụng một vòng lặp để tìm các ước số từ 2 đến căn bậc hai của `n`. Nếu một số `i` là ước số, nó sẽ thêm cả `i` và `n//i` vào tổng (trừ khi chúng bằng nhau).

2. **`find_friend_numbers(limit)`**: Hàm này tìm các số bạn bè trong miền từ 2 đến `limit`. Nó sử dụng hàm `sum_of_divisors` để kiểm tra nếu tổng các ước số của `num` là số khác `sum_div`. Nếu số ngược lại (`sum_div`) khi tính tổng ước số trả về giá trị ban đầu (`num`), thì chúng tạo thành một cặp bạn bè và được thêm vào danh sách `friend_numbers`.

3. Cuối cùng, mã sẽ in ra tất cả các cặp số bạn bè tìm được trong miền đã chỉ định.

### Lưu ý
Để thay đổi miền tìm kiếm, bạn chỉ cần thay đổi giá trị của biến `limit`.
1
0
Duy Lê
19/10 21:01:43
def sum_of_proper_divisors(n):
total = 1
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
total += i
if i != n // i:
total += n // i
return total def find_amicable_numbers(limit):
amicable_pairs = []
for num in range(2, limit):
partner = sum_of_proper_divisors(num)
if partner != num and partner < limit and sum_of_proper_divisors(partner) == num:
amicable_pairs.append((num, partner))
return amicable_pairs
# Thay đổi giá trị 'limit' theo miền cần tìm
limit = 10000 amicable_numbers = find_amicable_numbers(limit)
for pair in amicable_numbers:
print(pair)

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
Trắc nghiệm Lập trình Lớp 12 mới nhất

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

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Gia sư Lazi Gia sư