Emirp number là một loại số đặc biệt là số nguyên tố mà các chữ số của nó khi đảo ngược lại sẽ tạo ra một số nguyên tố khác (số nguyên tố này khác số nguyên tố).
Emirp là đảo ngược của số nguyên tố.
Một số số nguyên tố không phải là emirp là số nguyên tố palindromic và số nguyên tố có một chữ số.
Một số số Emirp là 13, 17, 37, 733.
Chương trình in tất cả các số emirp nhỏ hơn n.
Ở đây, chúng ta được cung cấp một số n và chúng ta cần in tất cả số emirp nhỏ hơn hoặc bằng n.
Hãy lấy một ví dụ để hiểu vấn đề,
Đầu vào: n =40
Đầu ra: 13, 17, 31, 37
Phương pháp tiếp cận giải pháp
Để tìm tất cả các số emirp nhỏ hơn một số đã cho, chúng ta cần tìm tất cả các số nguyên tố nhỏ hơn n và sau đó kiểm tra xem số được tạo thành bằng cách đảo ngược các chữ số của nó có phải là số nguyên tố hơn số emirp của nó hay không, hãy in ra.
Để tìm số nguyên tố cho đến n và sau đó kiểm tra lại các chữ số đảo ngược của nó, phương pháp tốt nhất là sử dụng sàng Eratosthenes.
Chương trình minh họa hoạt động của giải pháp của chúng tôi,
Ví dụ
#include <bits/stdc++.h> using namespace std; int reverseDigits(int x) { int digitRev = 0; while (x > 0) { digitRev = (digitRev*10) + x%10; x = x/10; } return digitRev; } void findAllEmirpNumber(int n) { bool primeNo[10001]; memset(primeNo, true, sizeof(primeNo)); for (int p=2; p*p<=10001; p++) { if (primeNo[p] == true) { for (int i=p*2; i<=10001; i += p) primeNo[i] = false; } } for (int p=2; p<=n; p++) { if (primeNo[p]) { int revNo = reverseDigits(p); if (p != revNo && primeNo[revNo]) { cout<<p<<"\t"; if(revNo <= n) cout<<revNo<<"\t"; primeNo[revNo] = false; } } } } int main() { int n = 40; cout<<"All Emirp numbers less than or equal to "<<n<<" are\n"; findAllEmirpNumber(n); return 0; }
Đầu ra
All Emirp numbers less than or equal to 40 are 13 31 17 37