B2139 区间内的真素数

前置芝士

to_string(int n):将 n 转换为 string

stoi(string s):将 s 转换为 int

reverse(iterator a, iterator b):反转 a 到 b 之间的区间。

思路

暴力模拟,枚举 $m$ 到 $n$ 的每一个数。

依次判断区间内的数,和它的反序是否素数。

转换反序时,用 to_string 转换为 string,再用 reverse 反转,再用 stoi 转成 int

注意,和无解情况的判断,可以用两个bool变量记录状态。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int n, m;bool f, b;
bool isp(int n)
{
    if(n == 1) return 0;
    if(n == 2) return 1;
    if(n % 2 == 0) return 0;
    for(int i = 3;i * i <= n;++i)
        if(n % i == 0) return 0;
    return 1;
}
int main()
{
    cin >> n >> m;
    for(int i = n;i <= m;++i)
    {
        string t = to_string(i);
        reverse(t.begin(), t.end());
        int j = stoi(t);
        if(isp(i) && isp(j))
        {
            if(f) cout << ",";
            cout << i;f = 1;b = 1;
        }
    }
    if(!b) cout << "No";
    return 0;
}
posted @ 2021-07-21 09:51  Jijidawang  阅读(35)  评论(0编辑  收藏  举报  来源