C ++中的Emirp数字

Emirp 号是一种特殊的数字类型,它是质数,当其数字反转时,会产生另一个质数(该质数与原始质数不同)。

埃米尔普(Emirp)是素数的反面。 

一些不是emirp的质数是回文质数和个位数质数。 

一些Emirp号码13、17、37、733 

程序打印所有小于n的emirp数字。

在这里,给我们一个数字n,我们需要打印所有小于或等于n的emirp数字 

让我们举个例子来了解这个问题,

输入:  n = 40

输出:  13,17,31,37

解决方法

要找到所有小于给定数字的emirp数,我们需要找到所有小于n的素数,然后检查通过反转其数字形成的数字是否是比其emirp数为质数的数字,请打印出来。

为了找到直到n的质数,然后重新检查其反数,最好的方法是使用Eratosthenes筛。

该程序说明了我们解决方案的工作原理,

示例

#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<<"所有Emirp数小于或等于 "<<n<<" are\n";
   findAllEmirpNumber(n);
   return 0;
}
输出结果
所有Emirp数小于或等于 40 are 13 31 17 37