题目描述
小明最近痴迷于质数,他想知道任意给出一个数,在这个数中有没有蕴含一个最大的质数。
一个整数的子串是由该整数连续数位的数字构成。例如:6158的子串包括:6,1,5,8,61,15,58,615,158,6158。
现在小明请你写程序帮助他在某个数N中的子串中找出最大的一个质数。
输入
一行,一个整数N(10<=N<=1000000000)。
输出
输出N的最大质子串,如果没有质数则输出“No"。
输入样例 复制
【输入样例1】 2319 【输入样例】 6804
输出样例 复制
【输出样例1】 31 【输出样例】 No
运用一个函数substr截取所有子串,判断是不是质数,如果是就打擂台。
核心:
for(int i=1;i<=len;i++)
{
for(int j=0;j<=len-i;j++)
{
ss=s.substr(j,i);
//ss放的所有的子串
now=0;
for(int k=0;k<ss.size();k++)
now=now*10+ss[k]-48;
//判断now是否为质数
if(check(now))
ans=max(ans,now);
}
}
check函数自己写,就是用来判断质数的,最后输出即可。如果ans==0那就输出No
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s,ss;
int d,t,f,ans=0;
cin>>s;
d=s.size();
for(int i=1;i<=d;i++)
{
for(int j=0;j<=d-i;j++)
{
ss=s.substr(j,i);
t=0;
for(int k=0;k<ss.size();k++)
t=t*10+ss[k]-48;
f=1;
for(int k=2;k*k<=t;k++)
if(t%k==0)
{
f=0;
break;
}
if(f==1&&t>ans)
ans=t;
}
}
if(ans>0)
cout<<ans;
else
cout<<"NO";
}