问题描述
如果一个质数 P 的每位数字都是质数, 而且每两个相邻的数字组成的两位 数是质数, 而且每三位相邻的数字组成的三位数是质数, 依次类推, 如果每相 邻的 k 位数字组成的 k 位数都是质数, 则 P 称为超级质数。
如果把超级质数 P 看成一个字符串, 则这个超级质数的每个子串都是质 数。
例如, 53 是一个超级质数。
请问, 最大的超级质数是多少?
答案提交
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
【思路及代码】
* to_string()函数可以将数字转化为字符串
* substr()函数可以截取字符串
* stio()函数可以将字符串转化为数字
* 使用埃式筛法筛选出质数,使用set进行存储,方便后面判断子串是否是质数
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
set<int> prime;
int primes[N],cnt,st[N];
void get_prime(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])
{
primes[cnt++]=i;
prime.insert(i);
for(int j=2*i;j<=n;j+=i)
{
st[j]=1;
}
}
}
}
int main()
{
get_prime(100010);
for(int i=cnt-1;i>=0;i--)
{
int flag=1;
string str=to_string(primes[i]);
for(int i=0;i<str.size();i++)
{
for(int j=1;j<=str.size()-i;j++)
{
string ss=str.substr(i,j);
int nn=stoi(ss);
if(!prime.count(nn))
{
flag=0;
break;
}
}
}
if(flag)
{
cout<<primes[i];
break;
}
}
return 0;
}
【答案】373