美文网首页
【PAT-甲级-C++】1015. Reversible Pri

【PAT-甲级-C++】1015. Reversible Pri

作者: linghugoogle | 来源:发表于2018-01-24 17:23 被阅读21次

    1015. Reversible Primes (20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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
    

    2、思路

    1)思路很清晰,但运行的时候发现不少问题;
    2)第一次运行的时候数组越界,找了半天,发现#define N 数字太大,尽量使用vector
    3)超时:两个地方,判断质数的时候使用了sqrt开方操作;在进制转换的过程中,可以直接转换,而不是使用数组作为中间状态。

    3、代码

    #include<iostream>
    using namespace std;
    
    //判断一个正整数是不是质数
    bool is_prime(int n) {
        int j;
        if (n < 2) return false;
        if (n == 2 || n == 3) return true;
        for (j = 2; j*j<= n  ; ++j) {
            if (n%j == 0) {
                return false;
            }
        }
        return true;
    }
    
    //将一个10进制的数字转为d进制、倒序、再转为10进制
    int change(int n,int d) {
        int m=0;
        int i, j;
        while (n != 0) {
            m *= d;
            m += n%d;
            n = n / d;
        }
        return m;
    }
    
    int main()
    {
        int n, d,m;
        int i, j;
        while (scanf("%d", &n)!=EOF) {
            if (n < 0)
                return 0;
            scanf("%d", &d);
            //判断n是否为质数
            if (!is_prime(n)) {
                printf("No\n");
                continue;
            }
            
            //进制转换
            m = change(n, d);
    
            //判断
            if (is_prime(m))
                printf("Yes\n");
            else
                printf("No\n");
        }
        system("pause");
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:【PAT-甲级-C++】1015. Reversible Pri

          本文链接:https://www.haomeiwen.com/subject/ivguaxtx.html