天天看點

1015. Reversible Primes (20)

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

/*
 要求:(1)判斷該數是否為素數(2)判斷該數基于d進制的逆序的十進制數是否為素數
 思路:(1)IsPrime判斷素數  (2)基于d進制的逆序,并轉換為十進制
 */

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


int main(int argc, const char * argv[]) {
    int n, d;
    while (scanf("%d", &n) != EOF) {
        if (n < 0) {
            break;
        }
        scanf("%d", &d);
        if (!IsPrime(n)) {
            printf("No\n");
            continue;
        }
        
        //基于d進制的逆序(給出的數是十進制呀 是以要換成d進制後再逆序)
        int a[100], m = 0, len = 0;
        while (n) {
            a[len++] = n % d;
            n /= d;
        }
        for (int i = 0; i < len; i++) {
            m = m * d + a[i];
        }
        
        if (IsPrime(m)) {
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
    
    return 0;
}
           

繼續閱讀