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