reversible prime
可逆素数
decimal system
十进位制;十进位系统
number system
数字系统;进制
radix
【数】基数;根值
问题点
while(scanf("%d", &n) != EOF)
if(n<=1) return false; 非素数特例返回
题目简单,15分钟a题
英文单词坑
测试用例
input:73102322310-2
output:
Yes
Yes
No
ac代码
#include<cstdio>#include<cmath>#include<iostream>
using namespace std;// 判断n是否为素数
bool isPrime(int n){if(n<=1)return false;for(int i=2; i*i<=n; i++)if(n%i ==0)return false;return true;}int d[111];intmain(){int n, radix;while(scanf("%d",&n)!=EOF){// 当n为负数时,退出循环if(n<0)break;scanf("%d",&radix);// n不是素数,输出No,结束算法if(isPrime(n)== false)printf("No\n");else{// n是素数,判断n在radix进制下的逆序是否是素数int len =0;do// 进制转换{
d[len++]= n%radix;
n/=radix;}while(n!=0);// 逆序转换进制for(int i=0; i<len; i++)
n = n*radix + d[i];// 逆序是素数if(isPrime(n)== true)printf("Yes\n");elseprintf("No\n");}}return0;}
学习代码
基本一致,不再赘述
#include<cstdio>#include<cmath>
using namespace std;
bool isprime(int n){if(n <=1)return false;int sqr =int(sqrt(n *1.0));for(int i =2; i <= sqr; i++){if(n % i ==0)return false;}return true;}intmain(){int n, d;while(scanf("%d",&n)!=EOF){if(n <0)break;scanf("%d",&d);if(isprime(n)== false){printf("No\n");continue;}int len =0, arr[100];do{
arr[len++]= n % d;
n = n / d;}while(n !=0);for(int i =0; i < len; i++)
n = n * d + arr[i];printf("%s",isprime(n)?"Yes\n":"No\n");}return0;}