C++ 找出绝对素数 | 算法详解与代码实现

题目描述: 如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如 13。给定两个正整数 A、B,请求出大于等于 A、小于等于 B 的所有绝对素数。

输入描述: 输入 1 行,包含两个正整数 A 和 B。保证 10<A<B<100。

输出描述: 若干行,每行一个绝对素数,从小到大输出。

样例1: 输入 11 20 输出 11 13 17

思路:

  1. 判断一个数是否为素数的方法是遍历2到该数的平方根,看是否能整除。
  2. 对于每个两位数,判断它是否为素数,然后将其十位数和个位数对换,再次判断是否为素数,如果都是素数,则输出该数。
  3. 遍历A到B之间的所有两位数,按照上述方法判断是否为绝对素数,如果是,则输出。

代码实现如下:

#include<iostream>
#include<cmath>
using namespace std;

bool isPrime(int num) {
    if(num <= 1)
        return false;
    for(int i=2; i<=sqrt(num); i++) {
        if(num % i == 0)
            return false;
    }
    return true;
}

int swapDigits(int num) {
    int a = num / 10; // 十位数
    int b = num % 10; // 个位数
    return b * 10 + a;
}

int main() {
    int A, B;
    cin >> A >> B;
    for(int i=A; i<=B; i++) {
        if(isPrime(i) && isPrime(swapDigits(i))) {
            cout << i << endl;
        }
    }
    return 0;
}

原文地址: http://www.cveoy.top/t/topic/phbU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录