疑似炸 int WA 求调
查看原帖
疑似炸 int WA 求调
1697870
qwqerty楼主2025/6/19 10:39
#include<bits/stdc++.h>
using namespace std;
int n;
int f[10000005];
int fd(int x) {
	if (x == f[x]) return x;
	return f[x] = fd(f[x]);
}
bool vis[10000005];
int pr[700005], c;
int solve() {
	for (int i = 1; i <= n; i++) f[i] = i;
	for (int i = 2; i <= n; i++) {
		if (!vis[i]) pr[++c] = i;
		for (int j = 1; j <= c && i * pr[j] <= n; j++) {
			vis[i * pr[j]] = 1;
			if (i % pr[j] == 0) break;
		}
	}
	int cnt = 0;
	long long res = 0;
	for (int i = n / 2; i >= 1; i--) {
		for (int j = 1; j <= c && i * pr[j] <= n; j++) {
			int u = fd(i), v = fd(i * pr[j]);
			if (u != v) {
				res += i;
				f[u] = v;
				if (++cnt == n - 1) return res;				
			}
		}
	}
}
signed main() {
	cin >> n;
	cout << solve();
	return 0;
}
2025/6/19 10:39
加载中...