Hai lớp duyệt: ứng viên và ước
```python
def divisor_count(value):
count = 0
for d in range(1, value + 1):
if value % d == 0:
count += 1
return count
```
```python
def most_divisors_below(N):
best, best_count = None, 0
for value in range(1, N):
count = divisor_count(value)
if count > best_count:
best, best_count = value, count
return best, best_count
```
Với N nguyên dương, ứng viên là 1,…,N−1, không gồm N. Đếm ước của một ứng viên xét1 đến chính số ấy. Cập nhật khi tần số ước lớn hơn để giữ một số tốt nhất; khi hòa, mã giữ số gặp trước.
N=10 cho số 6 với 4 ước1,2,3,6. N=1 không có số nguyên dương nhỏ hơn N, nên trả(None,0), không báo1 như một ứng viên hợp lệ.
Số hoàn hảo dùng tổng ước, loại chính nó
```python
def perfect_number(value):
total = 0
for d in range(1, value):
if value % d == 0:
total += d
return value > 0 and total == value
```
```python
def perfect_below(N):
result = []
for value in range(1, N):
if perfect_number(value):
result.append(value)
return result
```
Số hoàn hảo bằng tổng các ước dương nhỏ hơn chính nó. Ví dụ6=1+2+3;28=1+2+4+7+14. Duyệt ứng viên dưới N và giữ mọi số thỏa, không dừng ở số đầu. Số 1 không hoàn hảo vì không có ước dương nhỏ hơn 1 và tổng bằng 0.
Chạy `uoc 10` để nhận(6,4), `hoan-hao 30` để nhận[6,28]. Với `hoan-hao 6`, không lấy 6 vì cận là nhỏ hơn N. Dãy kết quả rỗng được trả bằng[]; không so danh sách với chuỗi rỗng để quyết định có kết quả. Bản thực hành nhận 1<=N<=1000 để chạy cách duyệt đơn giản trên dữ liệu nhỏ.
Bài luyện
Vì sao N=1 cần trả không có ứng viên khi tìm số nguyên dương nhỏ hơn N?
1 chỉ có một ước dương là 1.
Sẽ vi phạm cận của bài toán.
0 không thuộc miền số nguyên dương.
Miền1,…,N−1 là rỗng.
Lời giải
Ứng viên phải dương và <N. Khi N=1, range(1,1)rỗng nên không có đáp án số; bản mã trả(None,0).
Bài luyện
Số 6 có bao nhiêu ước dương?
Các ước là 1,2,3,6.
Đã bỏ chính số 6 khi bài đang đếm mọi ước dương.
Còn thiếu các ước2 và 3.
Không phải mọi số từ 1 đến6 đều chia hết6.
Lời giải
Kiểm các số 1 đến6:1,2,3,6 chia hết6;4 và 5 không thỏa. Có4 ước dương.
Bài luyện
Vì sao6 là số hoàn hảo?
6 có bốn ước dương.
Khi kiểm hoàn hảo phải loại chính số đang xét.
Tổng ấy là 12 và còn lấy cả chính số 6.
6 không chia hết4 hoặc 5.
Lời giải
Các ước dương nhỏ hơn 6 là 1,2,3. Tổng của chúng bằng 6 nên thỏa định nghĩa số hoàn hảo.
Bài luyện
Liệt kê số hoàn hảo nhỏ hơn 6 có lấy 6 không?
Miền phải theo đúng yêu cầu đề.
Đã đảo ngược điều kiện miền.
Dù hoàn hảo,6 không nhỏ hơn 6.
Phải thỏa cả thuộc miền và tính hoàn hảo.
Lời giải
Vòng ứng viên range(1,6)chỉ gồm1 đến5. Số 6 không thuộc miền nên không được xuất; kết quả lúc này là[].
Đang học