欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【TOJ 4705】最大素数

程序员文章站 2022-03-18 14:56:29
Description 给定一个数n,问是否可以按从左到右的顺序从其中取出连续的若干位组合成一个素数(大于1,且只能被1和自身整除的数称为素数),若有多种可能,则取所有可能的数中最大的一个。 如在1234中,我们可以取1234,123,234,12,23,34,1,2,3,4,发现素数有2,3,23 ......

 

Description

给定一个数n,问是否可以按从左到右的顺序从其中取出连续的若干位组合成一个素数(大于1,且只能被1和自身整除的数称为素数),若有多种可能,则取所有可能的数中最大的一个。

如在1234中,我们可以取1234,123,234,12,23,34,1,2,3,4,发现素数有2,3,23,其中最大的素数为23。

Input

输入数据有多组,每组占一行,每行一个正整数n(2<=n<=2147483647)。

 

Output

对于每组输出,若存在,则输出最大的素数,否则输出None

Sample input

1234

Sample output

23

 

注意:同位数时要注意取最大值的素数!!

#include<iostream> 
#include<cstring>
#include<cmath>
#include<algorithm>
#include<sstream>
using namespace std;
int prime(int a)
{
    int i;
    if(a==1||a==0)
    return 1;
    for(i=2;i<=sqrt(a);i++)
    {
        if(a%i==0)
        return 1;
    }
    return 0;
}
int ok(int m)
{
    int i,s=1;
    for(i=1;i<=m;i++)
        s=s*10;
    return s;
}
int weishu(int a)
{
    int s=0;
    while(a!=0)
    {
        a=a/10;
        s++;
    }
    return s;
}
int main()
{
    int i,j,t,n,ws,k,p,a,maxx;
    while(scanf("%d",&n)!=EOF)
    {
        t=ws=weishu(n);
        //cout<<"ws="<<ws<<endl;
        k=n;
        maxx=-1;
        for(i=1;i<=ws;i++)
        {
               if(t==10)
               {
                   if(prime(k)==0)
                   {
                       maxx=k;
                       cout<<k<<endl;
                       break;
                }
                t--;
            }
            else
            {
                p=ok(t);
                t--;
                //cout<<"i="<<i<<" p="<<p<<endl;
                k=n;
                for(j=1;j<=i;j++)
                {
                    //cout<<"k="<<k<<endl;
                    if(prime(k%p)==0)
                    {
                        a=k%p;
                        maxx=max(a,maxx);
                    }
                    k=k/10;
                }
                if(maxx!=-1)
                {
                    cout<<maxx<<endl;
                    break;
                }
            }
            if(maxx!=-1)break;
        }
        if(maxx==-1)cout<<"None"<<endl;
    }
    
    return 0;
}

 

上一篇: oracle11g数据库安装

下一篇: Day 1