mọi người giúp mình bài này với ạ.mình nghĩ nãy giờ rồi mà ko ra
(Tên file bài làm GOLDBACH.PAS) Một giả thuyết chưa được chứng minh trong toán học của Goldbach: Mọi số chẵn lớn hơn 2 đều có thể phân tích thành tổng của hai số nguyên tố: Chẳng hạn: 4 = 2 + 2; 6 = 3 + 3; 10 = 3 + 7. Hãy kiểm chứng giả thuyết này: Nhận vào số chẵn 𝑛, tìm hai số nguyên tố 𝑎, 𝑏 thỏa mãn 𝑎 + 𝑏 = 𝑛. Nếu có nhiều cặp số nguyên tố có tổng bằng 𝑛, hãy chỉ ra cặp (𝑎, 𝑏) mà: 𝑎 ≤ 𝑏 và 𝑎 lớn nhất có thể
Dữ liệu: vào từ file GOLDBACH.INP Một số nguyên dương 𝑛 ≤ 10^9 .
Kết quả: ghi ra file GOLDBACH.OUT Hai số nguyên tố 𝑎, 𝑏 tìm được cách nhau bởi dấu cách
GOLDBACH.INP 10
GOLDBACH.OUT 5 5
Kiểm chứng giả thuyết GOLDBACH
B1: Chọn a là số nguyên tố lớn nhất mà bé hơn n.
B2: Kiểm tra (n-a) xem có phải số nguyên tố không.
B3: Nếu đúng thì b = (n-a). Xuất ra cặp (a, b).
B4: Nếu không thì tìm chọn số nguyên tố nhỏ hơn tiếp theo là a, quay lại B2.
^ a sẽ gần với n/2 hơn là 2 đấy bạn
Bài này sàng không nổi chắc phải dùng RM với 10^8 trở đi.
RM??là gì vậy bạn???
Kiểm tra nguyên tố Miller-Rabin thì phải.
Mình nghĩ làm như vậy ko đc.vì phải chạy lặp 5*10^8 lần
Làm như bạn thì tối đa phải chạy lặp 5*10^8 lần đấy
Thực ra có hai hướng làm: một là chỉ dùng RM (+ chia thử), hai là dùng sàng sau đó RM (để ăn test max).
Bạn nói rõ hơn được ko.mình vẫn chưa rõ lắm làm sao sàng đc 1 số to như thế
Sàng nguyên tố đến 10^6 thôi. Nếu muốn kiểm tra số nguyên tố với số N cỡ 10^9 thì chạy kiểm tra tất cả các số nguyên tố trong khoảng từ 2 -> sqrt(N)
Chọn delta
rồi sàng trong đoạn [n/2-delta..n/2]
. Do tổng Goldbach có mật độ khá dày (chỉ thua số nguyên tố) nên chọn delta từ 5k trở lên.
Đầu tiên, tìm tất cả các số là số nguyền tố từ 2 đến n / 2.
Tiếp theo, với lần lượt từng số đó thử xem hiệu n và số đó có phải là số nguyên tố không
Nếu đúng -> kết quả
n <= 10^9… mình từng sàng từ đầu rồi, mất thời gian lắm
mình vẩn chưa hiểu khoảng này là khoảng nào.bạn giả thích thêm chút đi
cả phần này nữa