1015 Reversible Primes

在这里插入图片描述

题目大意:

输入n,判断n和n转换为d进制并翻转后再还原为十进制后的数字是否都为素数,输入结束的标志为n是负数。

解题思路:

首先构造了一个十万的素数表,为了方便查找我用SET存了一下,当然用数组二分查也很方便,然后就是按照朴素的进制转换思路写就可以了,另外发现PTA编译器居然不认ATOi函数,真是标准C++啊。。。
代码如下:

#include<iostream>
#include<cstdio>
#include<fstream>
#include<set>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<iomanip>
#include<cstdlib>
#include<stdlib.h>
#include<list>
#include<queue>
#include<stack>
#include<algorithm>
#define inf 0x3f3f3f3f
#define MOD 1000000007
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define meminf(a) memset(a,inf,sizeof(a))
//vector ::iterator it;
//set<int>::iterator iter;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
set<int> p;
void get_prime()//构造了十万以内的素数表
{
  int  book[100010]={0};
  set<int>:: iterator iter;
  for(int i=2;i<=100001;i++)
  {
    if(book[i]==0)
    {
      p.insert(i);
    }
    for(iter=p.begin();i*(*iter)<=100001&&iter!=p.end();iter++)
    {
      book[i*(*iter)]=1;
      if(i%(*iter)==0)break;
    }
  }
}
int main()
{
  std::ios::sync_with_stdio(false);
  cin.tie(0);
//  freopen("test.txt","r",stdin);
//  freopen("output.txt","w",stdout);
  get_prime();
  int n,d;
  while(cin>>n&&n>=0)
  {
    cin>>d;
    int position[1010]={0},cur=0,n1=n;//保存转换为d进制后的对应位上的数字
    while(n1)//进制转换
    {
      position[cur++]=n1%d;
      n1/=d;
    }
    int k=0;
    for(int i=cur-1;i>=0;i--)
    {
      k+=position[i]*pow(d,cur-i-1);//还原为十进制
    }
    if(p.count(n)&&p.count(k))cout<<"Yes"<<endl;//原数字与“翻转”后的数字是否在集合中
    else cout<<"No"<<endl;
  }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值