fork download
  1. from math import comb
  2. from fractions import Fraction
  3.  
  4. def sieve(n):
  5. """Hàm tạo danh sách boolean is_prime[0..n] với is_prime[i] True nếu i là số nguyên tố."""
  6. is_prime = [True] * (n + 1)
  7. is_prime[0] = is_prime[1] = False
  8. for i in range(2, int(n**0.5) + 1):
  9. if is_prime[i]:
  10. for j in range(i*i, n + 1, i):
  11. is_prime[j] = False
  12. return is_prime
  13.  
  14. def main():
  15. N = 2025
  16. # Tạo danh sách các số lẻ và số chẵn từ 1 đến 2025
  17. odds = list(range(1, N + 1, 2))
  18. evens = list(range(2, N + 1, 2))
  19.  
  20. # Tổng lớn nhất có thể: 2025 (số lẻ lớn nhất) + 2024 (số chẵn lớn nhất) = 4049
  21. max_sum = 4049
  22. is_prime_list = sieve(max_sum)
  23.  
  24. # Đếm số cặp (o,e) với o trong odds, e trong evens sao cho tổng là số nguyên tố.
  25. count_prime_pairs = 0
  26. for o in odds:
  27. for e in evens:
  28. if is_prime_list[o + e]:
  29. count_prime_pairs += 1
  30.  
  31. # Tổng số cặp chọn được là C(2025,2)
  32. total_pairs = comb(N, 2)
  33.  
  34. # Xác suất là tỉ số giữa số cặp có tổng nguyên tố và tổng số cặp.
  35. probability = count_prime_pairs / total_pairs
  36.  
  37. # In kết quả dưới dạng phân số tối giản và số thực.
  38. print("Số cặp (số lẻ, số chẵn) cho tổng là số nguyên tố:", count_prime_pairs)
  39. print("Tổng số cặp chọn được:", total_pairs)
  40. print("Xác suất (dạng số thực):", probability)
  41. print("Xác suất (dạng phân số tối giản):", Fraction(count_prime_pairs, total_pairs))
  42.  
  43. if __name__ == '__main__':
  44. main()
  45.  
Success #stdin #stdout 0.26s 16300KB
stdin
45
stdout
Số cặp (số lẻ, số chẵn) cho tổng là số nguyên tố: 270530
Tổng số cặp chọn được: 2049300
Xác suất (dạng số thực): 0.1320109305616552
Xác suất (dạng phân số tối giản): 27053/204930