PAT A1015 Reversible Primes(可逆素数)


这是一道素数判断问题,虽然思路很明确,要注意的是文中的D代表的是素数的进制,但是素数的判断要在十进制的范围内来做。

  • 一点经验:如果说一道题目已经拿到了大部分的分数,说明代码整体是正确的,只是一些输入的特殊情况没有考虑在内,此时应该重新读题,发现并考虑如何处理这些特殊输出
  • 例如bool isprime(int n)函数中对于if(n <= 1 ) return false;的边界判断
#include<cstdio>
#include<math.h>
using namespace std;
const int N = 100010;

bool isprime(int n){
    if(n <= 1 ) return false;
    int half = (int)sqrt(n*1.0);
    bool is_prime = true;
    for(int i = 2;i <= half; i ++){
        if(n%i==0){
            is_prime = false;
        }
    }
    return is_prime;
}

int reverse(int n,int d){
    int int_array[N];
    int count = 0;
    int result = 0;
    while(n){
        int_array[count++] = n%d;
        n = n/d;
    }
    for(int i = 0;i < count;i++){
        result = result*d+int_array[i];
    }
    return result;
}

int main(){
    int n,d;
    scanf("%d",&n);
    while(n>0){
        scanf("%d",&d);
        if(!isprime(n)){
            printf("No");
        }else{
            int r = reverse(n,d);
            isprime(r)?printf("Yes"):printf("No");
        }
        printf("\n");
        scanf("%d",&n);
    }
    return 0;
}
posted @ 2020-08-25 12:55  是水泵呢  阅读(109)  评论(0编辑  收藏  举报