|
发表于 2016-12-17 18:39:34
|
显示全部楼层
我也是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;
- }
复制代码 |
|