Buổi 8: Ước, số nguyên tố, UCLN – BCNN

Hôm nay em sẽ học

  1. Liệt kê và đếm ước của một số
  2. Kiểm tra số nguyên tố
  3. Vì sao chỉ cần xét đến √n – bài học về tốc độ
  4. Thuật toán Euclid tìm UCLN; tính BCNN

Bấm vào slide rồi dùng phím ← → để chuyển, phím F để xem toàn màn hình.

Mở toàn màn hình

1. Kiến thức chính

Ước và số nguyên tố

  • a chia hết cho b khi a % b == 0; khi đó b là ước của a.
  • Số nguyên tố có đúng 2 ước là 1 và chính nó: 2, 3, 5, 7, 11, 13, …
Số 0, số 1 và số âm không phải số nguyên tố.

Chỉ cần xét đến √n

Ước luôn đi theo cặp: 36 = 1×36 = 2×18 = 3×12 = 4×9 = 6×6. Trong mỗi cặp có một số ≤ √36 = 6. Vì vậy chỉ cần thử i khi i * i <= n.

n = int(input())
nt = n >= 2              # số nhỏ hơn 2 không phải nguyên tố
i = 2
while i * i <= n:
    if n % i == 0:
        nt = False       # tìm thấy ước → không nguyên tố
        break
    i += 1
print("YES" if nt else "NO")

Đếm ước bằng cặp (i, n // i): mỗi ước i ≤ √n cho 2 ước, riêng khi i * i == n chỉ đếm 1.

Tốc độ: bao nhiêu phép tính là kịp?

Python làm được khoảng 10⁶ – 10⁷ phép tính mỗi giây.

n tối đaCách làm
≤ 10⁶duyệt i từ 1 đến n được
≤ 10¹²phải dùng √n (khoảng 10⁶ bước)

UCLN – thuật toán Euclid, BCNN

UCLN(a, b) = UCLN(b, a % b), và UCLN(a, 0) = a.

a, b = map(int, input().split())
x, y = a, b
while y != 0:
    x, y = y, x % y
g = x                     # UCLN
print(g, a // g * b)      # BCNN = a × b ÷ UCLN

Khi đi thi được dùng thư viện: import math rồi math.gcd(a, b), math.lcm(a, b).

2. Ghi nhớ và lỗi thường gặp

LỗiHậu quả
Coi số 1 là nguyên tốsai test n = 1
Duyệt đến n khi n ≤ 10¹²quá thời gian
Đếm ước i và n // i hai lần khi i × i = nthừa 1 ước với số chính phương
Tính BCNN bằng a * b / gra số thực – dùng //

3. Câu hỏi tự kiểm tra

  1. Số 91 có phải số nguyên tố không?
  2. Chạy tay thuật toán Euclid với (60, 24). UCLN bằng bao nhiêu?
  3. Muốn kiểm tra số n = 10¹⁰ có nguyên tố không, vòng lặp cần chạy khoảng bao nhiêu lần?

4. Bài tập về nhà

Bài 1 ★★ – DEMNT

Input: hai số nguyên a, b (1 ≤ a ≤ b ≤ 10⁴).

Output: số lượng số nguyên tố trong đoạn từ a đến b.

InputOutput
1 104
10 204

Bài 2 ★★ – SINHDOI

Hai số nguyên tố hơn kém nhau 2 gọi là cặp số nguyên tố sinh đôi (ví dụ 3 và 5, 11 và 13).

Input: số nguyên n (5 ≤ n ≤ 10⁴).

Output: mỗi dòng một cặp p, p + 2 với p + 2 ≤ n, theo thứ tự tăng dần.

InputOutput
203 5
5 7
11 13
17 19

Bài 3 ★★ – UCLNDAY

Input: dòng 1 là n (1 ≤ n ≤ 1000); dòng 2 là n số nguyên dương (≤ 10⁹).

Output: UCLN của cả n số.

InputOutput
3
12 18 24
6
2
7 5
1
Gợi ý: UCLN(a, b, c) = UCLN(UCLN(a, b), c).

Bài 4 ★★★ (thử thách) – TONGUOC

Input: số nguyên n (1 ≤ n ≤ 10¹²).

Output: tổng tất cả các ước của n.

InputOutput
1228
3691
Cách nộp bài: mỗi bài một file .py đặt tên theo tên bài. Chạy thử với tất cả ví dụ trước khi nộp!

Chưa mở đáp án

Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.

Chưa mở đáp án

Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.

Zalo