`
844604778
  • 浏览: 550353 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
/*
 * 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;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics