Code kiểm tra số nguyên tố đối xứng bị sai

Yêu cầu là kiểm tra số vừa nhập có phải là số nguyên tố đối xứng không? (Số nguyên tố đối xứng là số nguyên tố bằng trung bình cộng của 2 số nguyên tố kề trước và kề sau nó).
Em viết như thế này mà vẫn sai, em nhìn đi nhìn lại cũng k biết sai chỗ nào ạ!
Mong ae giúp!

tại sao i chỉ chạy tới 10 là dừng? Lỡ có 3 số nt liên tiếp cách nhau 11 đơn vị thì sao :V

3 Likes

vấn đề là mình có thể tăng con số đó lên đc không sao, nhưng nếu trong phạm vi tăng 10 đơn vị thì tại sao mình nhập là 17 vẫn đúng chứ , số kề trước nó là 13 và số kề sau là 19 mà

edit: à vậy phải dừng lại khi 1 trong 2 số trước hoặc số sau là số nt, vì đi xa hơn nữa là ko phải số nt liền kề rồi

11 13 17 19 23
 ^           ^

ví dụ như số 17 nó trả về đúng vì 11 và 23 là số nt, nhưng ko liền kề 17. Chạy i tới khi nào sotruoc hoặc sosau là số nt thì dừng, vd ở đây là dừng lại khi i=2, sosau = 19. Bỏ luôn while (i<=10) đi xài while (true)

5 Likes

theo code của bạn thì số 13 ra true vì bạn sẽ thấy i = 4 => 9 vs 17
nhưng thực tế khi chạy tới i = 2, số 11 là số nguyên tố nhưng 15 không phải, vậy phải là false ngay
vậy nên với mỗi i

  1. trước và sau đều nguyên tố => true
  2. trước và sau có đúng 1 sô nguyên tố => false
  3. cả 2 đều không phải thì ignore, chạy tiếp vòng lặp
4 Likes

Cái này dùng xor ^ là đẹp.

5 Likes

À đúng rồi nhỉ, cảm ơn bạn vì đã giúp đỡ ạ!

Mình hiểu rồi, cảm ơn bạn ạ!

xor(0,0) ra 1 chắc phải thêm gì nữa :V

bool isPrimePrev = isPrime(n - i);
bool isPrimeNext = isPrime(n + i);
if (isPrimePrev || isPrimeNext) return !(isPrimePrev ^ isPrimeNext);

:neutral_face:

3 Likes

Mình đang tính kiểu

if(p != q) return false; // xor là phép toán logic thôi.
if(p) return true; // q cũng true luôn

Liệu ta có thể test cùng lúc n+/-i?

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?