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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言
C++
C#
MongoDB
MySQL
Javascript
PHP