【TOJ 4705】最大素數
阿新 • • 發佈:2018-03-08
sam ros i++ tro cstring 個數 ostream prime AC
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】最大素數