PAT (Advanced Level) 1015 Reversible Primes(进制转换)

mac2024-03-18  24

题目链接:点击查看

题目大意:现在给出定义“翻转素数”:在10进制下是素数,并且在D进制下翻转后回到十进制,还是素数,现在给出一个十进制的数num和进制radix,判断是否属于翻转素数

题目分析:虽然是简单水题,但还是输在了阅读理解和英语上面,一开始实在是没看懂题目,以为给出的数字就已经是D进制的数了,我还纳闷,样例的23是二进制吗?怎么每一位上的数都比进制还大,算了不管了,先写一发,交上去全WA,可是样例过了啊?于是检查了半天原来是判断素数的函数里写成了i*i<=sqrt(num),emmm,改过来之后样例跑不出来了,去网上一查才知道题意原来是这样的,是在D进制下翻转,而不是在10进制下翻转,回到这个题目,若要实现太简单了,先将10进制转换为D进制,用vector也行,string类也行,把每一位数字储存起来,翻转后再乘起来就行了,这个题目就是考察了一个进制转换,本身不难,但是英语难。。哭了

代码:

#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std; typedef long long LL; const int inf=0x3f3f3f3f; const int N=1e3+100; bool is_prim(int num) { if(num<2) return false; for(int i=2;i*i<=num;i++) if(num%i==0) return false; return true; } int main() { // freopen("input.txt","r",stdin); int num; while(scanf("%d",&num)!=EOF&&num>=0) { int radix; scanf("%d",&radix); if(!is_prim(num)) { cout<<"No"<<endl; continue; } string s; while(num) { s+=to_string(num%radix); num/=radix; } int sum=0; for(int i=0;i<s.size();i++) { sum*=radix; sum+=s[i]-'0'; } if(is_prim(sum)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }

 

最新回复(0)