您的位置:首页 > 产品设计 > UI/UE

(大素数2.1.2.1)UVA 10871 Primed Subsequence(欧拉筛法)

2013-10-16 10:33 555 查看
/*
* UVA_10871.cpp
*
*  Created on: 2013年10月7日
*      Author: Administrator
*/

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 10011;
bool u[maxn];
int su[maxn];
int num = 0;

void prepare() {
int i, j;
memset(u, true, sizeof(u));

for (i = 2; i < maxn; ++i) {
if (u[i]) {
su[++num] = i;
}

for (j = 1; j <= num; ++j) {
if (i * su[j] > maxn) {
break;
}

u[i * su[j]] = false;

if (i % su[j] == 0) {
break;
}
}
}
}

bool pri(int x) {
if (x <= 10010) {
return u[x];
}

int i;
for (i = 1; i <= num; ++i) {
if (x % su[i] == 0) {
return false;
break;
}
}

return true;
}

int main() {
prepare();

int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);

int i, j;
int s[n + 1];
s[0] = 0;
for (i = 1; i <= n; ++i) {
scanf("%d", &s[i]);
s[i] += s[i - 1];
}

bool ok = false;
for (i = 2; i <= n; ++i) {
for (j = 1; j + i - 1 <= n; ++j) {
int k = s[i + j - 1] - s[j - 1];
if (pri(k)) {
ok = true;
printf("Shortest primed subsequence is length %d:", i);

for (k = 1; k <= i; ++k) {
printf(" %d", s[j + k - 1] - s[j + k - 2]);
}
printf("\n");

break;

}
}

if (ok) {
break;
}

}

if (!ok) {
printf("This sequence is anti-primed.\n");
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: