刚开始的时候,没读懂题意直接开始写了。。。。样例不过。。因为没看到这句话 “all consecutive subsequences of length 2,3,...,d sum to a composite number” 改完之后居然无限TLE 这个实在费解。。。后来发现是数组开小了。。。 因为是连续开的数组,所以不会发生越界的事(情况是计算机不会判越界,而实际已经越了)。。。这样只有两个结果。。一个是超时(bool 类型情况下)。。一个是WA。。。提醒各位同胞吧。。。不要犯这样的错误。。。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int ans[1010], p, n, m, d;
bool vis[1010], prim[10000];
bool dfs() {
if(p>=2){
int sum=ans[p-1];
int k=p-d;
if(k<0) k=0;
for(int j=p-2;j>=k;j--){
sum+=ans[j];
if(prim[sum]) return 0;
}
}
if(p==m-n+1) return 1;
for (int i = n; i <= m; i++)
if (!vis[i]) {
vis[i] = 1;
ans[p++] = i;
if (dfs()) return 1;
vis[i] = 0;
p--;
}
return 0;
}
int main() {
int i, j;
memset(prim, 1, sizeof (prim));
prim[0] = prim[1] = 0;
for (i = 2; i < 10000; i++)
if (prim[i])
for (j = i * i; j < 10000; j += i)
prim[j] = 0;
while (scanf("%d%d%d", &n, &m, &d) && (n + m + d)) {
memset(vis,0,sizeof(vis));
p=0;
if (dfs()) {
printf("%d", ans[0]);
for (i = 1; i < p; i++)
printf(",%d", ans[i]);
printf("\n");
} else
printf("No anti-prime sequence exists.\n");
}
return 0;
}