Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 Emirp 숫자

<시간/>

에미프 number는 숫자의 특수 유형으로, 그 숫자가 반전될 때 다른 소수를 생성합니다(이 소수는 원래 숫자와 다름).

Emirp는 소수의 반대입니다.

emirp가 아닌 일부 소수는 회문 소수 및 한 자리 소수입니다.

일부 에미프 숫자 13, 17, 37, 733입니다.

n보다 작은 모든 emirp 숫자를 인쇄하는 프로그램.

여기에서 숫자 n이 주어지고 모든 emirp 숫자 를 인쇄해야 합니다. n보다 작거나 같음.

문제를 이해하기 위해 예를 들어보겠습니다.

입력: n =40

출력: 13, 17, 31, 37

해결 방법

주어진 숫자보다 작은 모든 emirp 숫자를 찾으려면 n보다 작은 모든 소수를 찾은 다음 그 숫자를 역으로 만든 숫자가 emirp 숫자보다 소수인지 확인하고 인쇄해야 합니다.

n까지의 소수를 찾아 그 역수를 다시 확인하는 가장 좋은 방법은 에라토스테네스의 체를 사용하는 것입니다.

우리 솔루션의 작동을 설명하는 프로그램,

#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;
}

출력

All Emirp numbers less than or equal to 40 are 13 31 17 37