PAT 甲级测试题目 -- 1015 Reversible Primes

题目链接

题目描述

反转素数指的是某个数是素数,且它在某进制的情况下反转过来的数字也是素数。例如:73 在 10 进制的情况下反转过来是 37,两个数都是素数,因此 73 是反转素数。
输入:
若一行输入给你两个正整数 N 和 M,N 小于 105,1 < M <= 10。
若一行输入为负数时停止输入。
输出:
根据输入的数据判断它不是反转素数。
若是,则输出 Yes
若不是,则输出 No

分析

进制转换 + 素数判断(注意 1 不是素数),该题为水题

实现

#include <iostream>
#include <math.h>

using namespace std;

int ReverseNum(int number, int redix) {
    string str;
    do {
        int temp = number % redix;
        str += temp + '0';
        number /= redix;
    } while (number != 0);

    int reverseNum = 0;
    for (int i = 0; i < str.size(); ++i) {
        char t = str[i];
        reverseNum = reverseNum*redix + t - '0';
    }
    return reverseNum;
}

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

int main() {
    int number, redix;
    while (true) {
        cin >> number;
        if (number < 0)
            break;
        cin >> redix;
        if(isPrime(number) && isPrime(ReverseNum(number, redix))){
            cout << "Yes" << endl;
        } else
            cout << "No" << endl;
    }
    return 0;
}

希望能帮到大家

posted @ 2019-01-31 14:32  Intro1997  阅读(228)  评论(0编辑  收藏  举报