[Lý Thuyết Số - Toán Học]. Bài 95. Số nguyên tố sinh đôi

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Nguồn bài:
28Tech
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

28Tech gọi 2 số xx + 2 là 2 số nguyên tố sinh đôi nếu cả 2 số này đều là số nguyên tố, bạn hãy giúp 28Tech đếm số lượng cặp số nguyên tố sinh đôi trong khoảng 2 số a, b.

Lưu ý là cặp số (x, y) sẽ được coi là giống cặp số (y, x)


Đầu vào
  • Dòng duy nhất chứa 2 số a, b

Giới hạn
  • 1≤a≤b≤10^9

  • b-a≤10^6


Đầu ra
  • In ra đáp án của bài toán

Ví dụ :

Input 01
3 13
Output 01
3
Giải thích test :
Các cặp thỏa mãn là (3, 5), (5, 7) và (11, 13)

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -2
    bengokyeuanh99  đã bình luận lúc 11, Tháng 4, 2025, 8:47

    import sys import math

    def generateprimes(limit): isprime = [True] * (limit + 1) isprime[0:2] = [False, False] for i in range(2, int(limit ** 0.5) + 1): if isprime[i]: for j in range(i*i, limit + 1, i): isprime[j] = False return [i for i, val in enumerate(isprime) if val]

    def counttwinprimes(a, b): limit = int(math.sqrt(b + 2)) + 1 baseprimes = generateprimes(limit)

    segment_size = b - a + 3  # include b+2
    is_prime = [True] * segment_size
    
    for p in base_primes:
        start = max(p * p, ((a + p - 1) // p) * p)
        for j in range(start, b + 3, p):
            is_prime[j - a] = False
    
    if a == 1:
        is_prime[0] = False
    
    count = 0
    for i in range(a, b - 1):
        if is_prime[i - a] and is_prime[i + 2 - a]:
            count += 1
    return count
    

    def main(): a, b = map(int, sys.stdin.readline().split()) print(counttwinprimes(a, b))

    if name == "main": main()