美文网首页
A1015 Reversible Primes (20分)

A1015 Reversible Primes (20分)

作者: km15 | 来源:发表于2020-02-10 17:40 被阅读0次

    /*
    题意:
    1、给出一个数字,以及一个进制
    2、判断一个数以及他的相反数是素数吗,是则输出
    3、输入一个负数代表结束

    解题:
    1、需要一个反转函数,一个转换进制函数
    2、素数表,以及散列表速度查询

    learn && worng:
    1、while的这个输入条件我忘了
    2、除基取余第一个是低位别忘了
    3、题意错,逻辑复杂,不如答案简单——直接取余,然后成绩取整,从0开始,因为0是低位
    4、判断素数,记得是从2开始,余上0会报错,余上1,永远都不是素数
    5、10的5次方,转为二进制,不会超过2的32,所以数组不用开那么大

    */

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    const int maxn = 10000; //!!!maxn也没有很大
    
    //素数表
    int prime[maxn], num_prime = 0;
    bool p[maxn] = { 0 };
    
    bool isprime(int n) {
        if (n <= 1) return false;
        int sqr = (int)sqrt(1.0 * n);
        for (int i = 2;i <= sqr;++i) {  //!!!这里错了,不是从0开始的!
            if (n % i == 0)
                return false;
        }
        return true;
    }
    
    //除基取余
    int bianhuan(int n, int D) {
        int num = 0;
        int array_quyu[maxn];
        do {    //变换进制没错
            array_quyu[num++] = n % D;
            n /= D;
        } while (n != 0);
    
        int temp = 0;
        for (int i = 0;i < num;++i) {   //!!!逆序转换十进制
            temp = temp * D + array_quyu[i];
        }
        return temp;
    }
    
    
    
    
    int main(int argc, char** argv) {
        int N, D;
        while (scanf("%d%d", &N, &D), N > 0) {
            if (isprime(N) == false) {
                cout << "No" << endl;
            }
            else {
                int num1 = bianhuan(N, D);
                if (isprime(num1) == true) {
                    cout << "Yes" << endl;
                }
                else {
                    cout << "No" << endl;
                }
            }
    
        }
    
        return 0;
    }

    相关文章

      网友评论

          本文标题:A1015 Reversible Primes (20分)

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