题意:将N在D进制下翻转再转为十进制后仍是素数
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
long converse(long n,int d)
{
int s=0;
/* if(n<d)
return n;
else
{
// cout<<n<<" "<<n/d<<" "<<n%d<<endl;
s+=converse(n/d,d1,d)*d1+n%d;
// cout<<s<<endl;
return s;
}*///一开始的想法 用递归转换进制 由于递归深度太深导致溢出
do
{
s=s*d+n%d;
n/=d;
}while(n!=0);
return s;
}//直接翻转并转为十进制
bool isprime(long n)
{
long i;
if(n%2==0&&n!=2)
return false;
for(i=2;i<n;i++)
if(n%i==0)
break;
if(i==n)
return true;
else
return false;
}
/*long reversal(long n)
{
string ns;
ostringstream o;
o<<n;
ns=o.str();
reverse(ns.begin(),ns.end());
istringstream i(ns);
i>>n;
return n;
}*/
int main()
{
int m;
long n,a;
cin>>n;
while(n>=0)
{
cin>>m;
// n=converse(n,10,m);
// cout<<n<<endl;
if(isprime(n))
{
// n=converse(n,m);
n=reversal(n);
// cout<<n<<endl;
// a=converse(n,m,10);
// cout<<a<<endl;
if(isprime(n))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else
cout<<"No"<<endl;
cin>>n;
}
return 0;
}
注意点:由于临时变量过多导致递归堆栈溢出