TOJ 4705最大素数

Posted kannyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOJ 4705最大素数相关的知识,希望对你有一定的参考价值。

 

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;
}

 

以上是关于TOJ 4705最大素数的主要内容,如果未能解决你的问题,请参考以下文章

TOJ 4085 Drainage Ditches(最大流)

TOJ 1594 Optimal Milking(二分+最大流)

TOJ1164: 最大公因子

TOJ3067: 求最大值II

TOJ 3665 方格取数(最大点权独立集)

TOJ礼品兑换 (多重背包恰好装满)