Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวเลข Emirp ใน C++


Emirp number คือจำนวนเฉพาะชนิดพิเศษที่เป็นจำนวนเฉพาะซึ่งหลักเมื่อกลับด้านจะสร้างจำนวนเฉพาะอีกจำนวนหนึ่ง (จำนวนเฉพาะนี้แตกต่างจากจำนวนเดิม)

Emirp คือส่วนกลับของจำนวนเฉพาะ

จำนวนเฉพาะบางจำนวนที่ไม่ใช่ Emirp คือ palindromic prime และจำนวนเฉพาะหลักเดียว

ตัวเลข Emirp บางส่วน คือ 13, 17, 37, 733

โปรแกรมพิมพ์ตัวเลข emirp ทั้งหมดที่น้อยกว่า n.

ที่นี่ เราได้รับตัวเลข n และเราต้องพิมพ์ หมายเลข emirp . ทั้งหมด น้อยกว่าหรือเท่ากับ n.

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: n =40

ผลลัพธ์: 13, 17, 31, 37

แนวทางการแก้ปัญหา

ในการหาจำนวนรวมทั้งหมดน้อยกว่าจำนวนที่กำหนด เราจำเป็นต้องค้นหาจำนวนเฉพาะทั้งหมดที่น้อยกว่า 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<<"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