萌新30pts求调(玄关)
查看原帖
萌新30pts求调(玄关)
725816
Perfect_Youth楼主2024/10/20 14:17
#include <bits/stdc++.h>

using namespace std;

int n, q, k, b[200007], cnt, dp[200007];

bool vis[200007];

void is_prime() {
	vis[0] = 1, vis[1] = 1;
	for (int i = 2; i <= 200000; i++) {
		if (!vis[i]) b[++cnt] = i;
		for (int j = 1; j <= cnt && i * b[j] <= 200000; j++) {
			vis[i * b[j]] = 1;
			if (i % b[j] == 0) break;
		}
	}
}

int main() {
	is_prime();
	for (int i = 153000; i <= 200000; i++) {
		for (int j = 1; j <= cnt; j++) {
			if (b[j] > i) break;
			if (!vis[b[j]] && !vis[i -  i / b[j] * b[j]]) dp[i]++;
		}
	}
	int q;
	scanf ("%d", &q);
	while (q--) {
		int n;
		scanf ("%d", &n);
		if (n >= 153000) {
		    printf ("%d\n", dp[n]);
		} else {
		    int c = 0;
    		for (int j = 1; j <= cnt; j++) {
    			if (b[j] > n) break;
    			if (!vis[b[j]] && !vis[n - n / b[j] * b[j]]) c++;
    		}
    		printf ("%d\n", c);
		}
	}
	return 0;
}
2024/10/20 14:17
加载中...