开始读题云里雾里,后面看了别人解释,才知道给出一个数和进制,判断这个十进制数是不是素数,还要要求把该数按照给的进制转换之后倒置,再转换为十进制,如果也是素数,那就输出Yes,否则输出No。
错误代码:测试点2、3没通过。
#include<cstdio>
#include<math.h>
#include<vector>
using namespace std;
bool Issushu(int n){
if(n==2 || n==3 || n==5){
return true;
}
if(n==1){
return false;
}
if(n%6==1 || n%6==5){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
return false;
}
int main(){
int N,D;
while(scanf("%d",&N)!=EOF){
if(N<0){
break;
}
scanf("%d",&D);
if(Issushu(N)!=true){
printf("No\n");
}
vector<int> vec;
int cur;
while(1){
if(N==0){
break;
}
cur=N%D;
vec.push_back(cur);
N=N/D;
}
for(int i=0;i<vec.size();i++){
N=N*D+vec[i];
}
if(Issushu(N)==true){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
经过检查,发现main函数中分支结构写错。
正确代码:
#include<cstdio>
#include<math.h>
#include<vector>
using namespace std;
bool Issushu(int n){
if(n==2 || n==3 || n==5){
return true;
}
if(n==1){
return false;
}
if(n%6==1 || n%6==5){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
return false;
}
int main(){
int N,D;
while(scanf("%d",&N)!=EOF){
if(N<0){
break;
}
scanf("%d",&D);
if(Issushu(N)!=true){
printf("No\n");
}
else{
vector<int> vec;
int cur;
while(1){
if(N==0){
break;
}
cur=N%D;
vec.push_back(cur);
N=N/D;
}
for(int i=0;i<vec.size();i++){
N=N*D+vec[i];
}
if(Issushu(N)==true){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}
return 0;
}