[PAT解题报告] Reversible Primes

给定自然数n,不超过105,再给定d, 问n是否是质数,并且把n化成d进制后,把数字倒过来(123变成321)还是不是质数。
注意1不是质数。
分析: 不难。主要有两个考点:
(1) 把n化成d进制,再翻转数字。 这个我们不断地除以d就好了,而且先得到的是低位数字,我们直接用x = x * d + n % d,最终x就是翻转后的结果了,很方便, O(logn)
(2) 判断x是否是质数,一个数的最小的约数不超过sqrt(x),所以循环没有必要到x,但从本题的数据范围似乎循环到x也没大问题,不过还是推荐sqrt(x)吧, O(sqrt(x)) = O(x0.5)

代码:
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

bool prime(int x) {
    if (x <= 1) {
        return false;
    }
    for (int i = 2; x / i >= i; ++i) {
        if (x % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    for (;;) {
        int n;
        scanf("%d",&n);
        if (n < 0) {
            break;
        }
        int d;
        scanf("%d",&d);
        if (prime(n)) {;
            int x = 0;
            for (; n; n /= d) {
                x = x * d + n % d;
            }
            puts(prime(x)?"Yes":"No");
        }
        else {
            puts("No");
        }
    }
    return 0;
}
 原题链接: http://www.patest.cn/contests/pat-a-practise/1015



全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务