C++ 中的 emirp 數


Emirp 數是一類特殊的數,它是質數,其數字倒過來構成的數也是質數(此質數不同於原來的數)。

Emirp 是 prime 的倒序拼寫。 

一些不是 emirp 數的質數是迴文質數和一位數的質數。 

一些 emirp 數 有 13、17、37、733。

打印出小於 n 的所有 emirp 數的程式。

在這裡,給定一個數 n,我們需要打印出小於或等於 n 的所有emirp 數 

我們舉個例子來理解這個問題,

輸入: 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

更新時間:22-Jan-2021

447 次瀏覽

開始職業生涯

完成課程以獲得認證

開始
廣告
© . All rights reserved.