【题目链接】
ybt 1411:区间内的真素数
OpenJudge NOI 1.13 23:区间内的真素数
【题目考点】
1. 质数
2. 数字拆分
【解题思路】
设函数判断一个数是否是质数
设函数求一个数字反序后的数字
对一个数字做数字拆分,即可倒序得到一个数字的各数位。再将这些数字从高位到低位组合起来,即可得到原数字反序后的数字。
遍历从m到n的数字,看每个数字及其反序后的数字是否都是质数,如果是,那么这个数是真素数。
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n)//判断是否是质数
{
if(n < 2)
return false;
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
int rev(int n)//数字反序
{
int num = 0;
for(int a = n; a > 0; a /= 10)//数字拆分 前提n >= 1
num = num * 10 + a % 10;
return num;
}
int main()
{
int m, n;
cin >> m >> n;
bool hasShow = false;//是否已经有输出
for(int i = m; i <= n; ++i)
{
if(isPrime(i) && isPrime(rev(i)))//如果i和i的逆序的数字都是质数
{
if(hasShow == true)//如果已经输出过
cout << ',';
else
hasShow = true;
cout << i;
}
}
if(hasShow == false)//如果没有输出过
cout << "No";
return 0;
}