我也是ACM的,大一的,创个帐号应该能提交的。。。。
下面的代码如果提交不能AC那我再改改。。
#include<cstdio>
#include<stdlib.h>
#include<string.h>
//数组a用来保存解,ai为数组a的下标
//int a[1001] = {0};int ai=0;
//素数访问表,通过isprim数组查询是否为素数
int isnprim[1000001]={0};
//处理isnprim数组
void deal()
{
int i,j;isnprim[0]=1,isnprim[1]=1;
for(i=2;i<1000001;i++)
for(j=i;j*i<1000001;j++)
{
if(j*i<=0)
break;
isnprim[j*i]=1;
}
}
//把字符数组转换成十进制数并返回
int STI(char *sbeg,char *send)
{
int n=0;
while(sbeg<=send)
n=n*10+*(sbeg++)-'0';
return n;
}
//有解标志
int flag;
//寻找解的函数
int f(char *s)
{
int len = strlen(s);
int i;
//如果越界就代表有解就打印解
if(len<=0)
{
flag = 1;
//for(i=0;i<ai;i++)printf("%d ",a[i]);
//putchar('\n');
}
else
{
//搜索可行解
for(i=0;i<6&&i<len;i++)
{
if(flag)return 1;
//a[ai] = STI(s,s+i);
if(!isnprim[STI(s,s+i)])
{
//ai++;
f(s+i+1);
//回溯
//ai--;
}
}
}
}
int main()
{
//调试用的文件
//freopen("Input.txt","r",stdin);
//freopen("Output.txt","w",stdout);
char s[1024];
deal();
while(~scanf("%s",s))
{
getchar();
flag=0;
f(s);
if(flag)puts("YES");
else puts("NO");
}
//将flag置0并调用f函数查询
//flag = 0;
//f("1447160917891993");
//if(flag)puts("YES");
//else puts("NO");
return 0;
}
|