#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<map>
using namespace std;
//30min
//耗时于思考和编写程序
/*************************
题意:给出一个数和基底
判断其自身与自身翻转是否都为素数
*************************/
/************************
求解要点:
筛法求素数:
即一开始全置1
若是素数,则循环加自身,把数筛掉
复杂度约为O(n)
************************/
/***********************
笔记:
每次涉及基底时,留意基底是r,而不是惯性思维的10!!!
*********************/
#define M 100009
int flag[M];
void juge_prim()
{
int i;
for(i = 0;i < M; i++)
flag[i] = 1;
int j;
flag[0]=flag[1]=0;
for(i=2;i<M;i++){
//cout<<i<<endl;
if(flag[i]){
for( j =i*2 ;j < M;j += i){
flag[j]=0;
}
}
}
}
int main()
{
juge_prim();
int num,r;
vector<int> v1;
int sum;
int i;
int q;
while(scanf("%d",&num),num>=0){
scanf("%d",&r);
v1.clear();
if(flag[num]){
while(num!=0){
v1.push_back(num%r);
num /= r;
}
sum=0;
q=1;
for(i=v1.size()-1;i>=0;i--){
sum += v1[i]*q;
q *= r;
}
//cout<<sum<<endl;
if(flag[sum])
printf("Yes\n");
else printf("No\n");
}
else printf("No\n");
}
return 0;
}
PAT 1015. Reversible Primes (20) 筛法求素数
最新推荐文章于 2022-02-22 19:31:52 发布