PATA1015题解(需复习)
Posted dcklm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PATA1015题解(需复习)相关的知识,希望对你有一定的参考价值。
有一个关键注意点, 1不是素数!!!!
还有一个审题不仔细,以为给定的数字一定是素数,只需要判断反转后的数字即可,其实给定的数字也要判断。
#include<iostream> #include<math.h> #include<vector> #include<map> #include<algorithm> #include<string> #include<stack> using namespace std; const int MAXN = 1000000; bool Prime[MAXN] = {false}; void gene() { for(int i = 2; i < MAXN;i++) { if(Prime[i] == false) { for(int k = i*2; k < MAXN; k += i) { Prime[k] = true; } } } Prime[1] = true; Prime[0] = true; } bool convert(int number, int radix) { vector<int>que; while(number) { que.push_back(number%radix); number = number / radix; } int temp = 0, product = 1,index = 0; int len = que.size(); while(index < len ) { int tt = que[len-1-index]; temp = temp + que[len-1-index]*product; product = product * radix; index ++; } if(Prime[temp] == false) return true; return false; } int main () { int n, m; gene(); while(scanf("%d",&n)) { if(n < 0) return 0; scanf("%d",&m); if(Prime[n]) cout << "No" << endl; else { if(convert(n,m)) { cout << "Yes" << endl; } else cout << "No" << endl; } } }
代码中翻转后的数字 转换成10进制的时候,想了很久,思路有些混乱,导致代码异常复杂,参考了大神改进版代码
int reverse(int n, int radix){ int ans = 0, k = 0; int num[111]; while(n > 0) { num[k++] = n % radix; n /= radix; } for(int i = 0; i < k; i++) { //从高位开始转换 相当于每加一次,把数左移一位 ans = ans * radix + num[i]; } return ans; --------------------- 作者:Phoenix_wei 来源:CSDN 原文:https://blog.csdn.net/phoenix_wei/article/details/79221760 版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于PATA1015题解(需复习)的主要内容,如果未能解决你的问题,请参考以下文章