1015 Reversible Primes

来源:互联网 发布:淘宝10元话费红包 编辑:程序博客网 时间:2024/05/10 15:25

A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.

Now given any two positive integers N (< 105) and D (1 < D <= 10), you are supposed to tell if N is a reversible prime with radix D.

Input Specification:

The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.

Output Specification:

For each test case, print in one line “Yes” if N is a reversible prime with radix D, or “No” if not.

Sample Input:
73 10
23 2
23 10
-2
Sample Output:
Yes
Yes
No

解题思路:看题太快,题目要求原先的数和反转之后的数都是素数才输出Yes,一直以为是反转后的数是素数就好了,还有判断素数居然写错了,坑爹。

#include<iostream>#include<stdio.h>#include<string>#include<math.h>using namespace std;int reverseNum(int num, int d){    string reNum = "";    while (num){        reNum += (num%d) + '0';        num /= d;    }    int ret = 0;    for (int i = 0; i < reNum.length(); i++){        ret += (reNum[reNum.length() - i - 1] - '0')*(int)pow(d*1.0, i*1.0);    }    return ret;}bool isPrime(int n){    if (n < 2){        return false;    }    for (int i = 2; i*i <= n; i++){        if (n%i == 0){            return false;        }    }    return true;}int priFlag[100005];int main(){    for (int i = 0; i < 100005; i++){        if (isPrime(i)){            priFlag[i] = 1;        }        else{            priFlag[i] = 0;        }    }    for (int n; scanf("%d", &n) != EOF && n >= 0;){        int d;        scanf("%d", &d);        int renum = reverseNum(n, d);        if (priFlag[renum] && priFlag[n]){            printf("Yes\n");        }        else{            printf("No\n");        }    }    return 0;}
0 0
原创粉丝点击