PAT甲题题解-1015. Reversible Primes (20)-素数

先判断n是否为素数
然后把n转化成d进制下再反转,转化为十进制的num
判断num是否为素数

注意n为0和1时,不是素数!!!
注意反转后的num也有可能为1,不是素数!!!

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int n,d;
bool isprime(int n){
    //注意n或者反转后的n为0或1的情况
    if(n==0 || n==1)
        return false;
    int fac=sqrt(n);
    for(int i=2;i<=fac;i++){
        if(n%i==0)
            return false;
    }
    return true;
}
int main()
{
    while(1){
        scanf("%d",&n);
        if(n<0)
            break;
        scanf("%d",&d);
        if(!isprime(n)){
            printf("No\n");
            continue;
        }
        int remainder;
        int num=0; //num即为n在d进制下反转后,再转化成十进制的数字
        while(n){
            remainder=n%d;
            num=num*d+remainder;
            n=n/d;
        }
        if(isprime(num))
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}
View Code

 

posted @ 2017-04-18 15:21  辰曦~文若  阅读(362)  评论(0编辑  收藏  举报