RE求调
查看原帖
RE求调
1272259
cgxd楼主2024/12/9 21:06
#include<bits/stdc++.h>
#define int long
using namespace std;
int divi[100000005];
vector<int> v, num;
int t, n;
signed main(){
	scanf("%d", &t);
	while(t--){
		int k;
		scanf("%d", &k);
		num.push_back(k);
	}n = *max_element(num.begin(), num.end());
	iota(divi, divi + n + 1, 0);
	for(int i = 2; i <= n; ++i){
		if(divi[i] == i) v.push_back(i);
		for(int j: v){
			if(i * j > n) break;
			divi[i * j] = j;
			if(j % i == 0) break;
		}
	}for(int i: num){
		if(divi[i] == i){
			printf("%lld\n", i);
			continue;
		}int ans = 0;
		while(divi[i] == i){
			ans ^= divi[i];
			i /= divi[i];
		}printf("%lld\n", ans);
	}return 0;
}
2024/12/9 21:06
加载中...