1.很简单的一道题,最后居然没能自己写出来。
2.虽然题目简单,但是涉及到了一些经常用到却不熟练的算法,比如某数由十进制转换为某进制以及由某进制转换回十进制,真的非常重要!!!
3.本题中判断是否为素数的筛选法函数跟书上的写法并不完全一致,一开始错误地参考书上的内容改了自己的代码,后来才发现自己的写法完全合理。
4.题目描述中保证了0不作为数据输入,但当1输入时,需要注意输出“NO”。1不是素数!!!
5.本题中存储转换后数字的数组原先用的是vector,但是后来报了“program received signal sigsegv”,感觉毫无道理,暂时打算到了vector那一节再做处理
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=100001;
vector<int> c;
int isprime(int a)
{
if(a<=1)return 0;
int b[a+1]={0};
for(int i=2;i<a;i++)
{
if(b[i]==0)
for(int j=i+i;j<=a;j+=i)
{
b[j]=1;
}
}
return b[a]==0?1:0;
}
int main()
{
int a,b;
while(1)
{
cin>>a;
if(a<0)break;
cin>>b;
if(isprime(a)!=1)
{
cout<<"No"<<endl;
continue;
}
int f[maxn];
int i=0;
while(a!=0)
{
f[i++]=a%b;
a=a/b;
}
int d=0;
for(int j=0;j<i;j++)
{
d=d*b+f[j];
}
if(isprime(d)==1)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}```