PAT A1015 Reversible Primes (20point(s))

题目链接
此题有两个坑:
第一,要理解题意,判断逆序是否为素数,是将n先转化为radix的进制,再将这个radix进制数反转,再转换为十进制看是否为素数。
第二,要控制结束条件,需用到while…EOF,仅仅靠n为负数作为结束条件会超时,因为radix在输入结束之后始终无法赋值。

#include<cstdio>
#include<math.h>
bool is_prime(int n){//判断n是否为素数
    if(n<=1) return false;
    else{
        int sqr=(int)sqrt(n);
        for(int i=2;i<=sqr;i++){
            if(n%i==0) return false;
        }
        return true;
    }
}
int d[111];
int main(){
    int n,radix,i;
    while(scanf("%d",&n)!=EOF){
        if(n<0) break;//当n为负数时,直接结束
        scanf("%d",&radix);
    if(!is_prime(n)){//原数就不是素数
    printf("No\n");
    continue;
    }
    else{//原数是素数,需判断n在radix进制转换下的逆序是否为素数
        for(i=0;n;i++){//除留余数法进制转化
            d[i]=n%radix;
            n/=radix;
        }
        for(int j=0;j<i;j++){//逆序转化为十进制数
            n*=radix;
            n+=d[j];
        }
        if(is_prime(n)){//逆序是素数
            printf("Yes\n");
        }
        else printf("No\n");
    }
    }
    return 0;
    }
发布了81 篇原创文章 · 获赞 0 · 访问量 657

猜你喜欢

转载自blog.csdn.net/weixin_44546393/article/details/105495730