1 条题解

  • 0
    @ 2025-11-3 0:09:35

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    int n, a[100005], b[35], prexor;
    long long ans, cnt[1 << 10];
    vector <int> prime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
    
    void read(int &a, int ch = 0) {
    	while (!isdigit(ch = getchar()));
    	for (a = 0; isdigit(ch); ch = getchar()) a = (a << 3) + (a << 1) + (ch ^ 48);
    }
    void prework() {
    	// 预处理数组 b
    	for (int i = 1; i <= 30; i++) {
    		int j = i;
    		for (int k = 0; k < 10; k++) {
    			while (j % prime[k] == 0) {
    				b[i] ^= 1 << k;
    				j /= prime[k];
    			}
    		}
    	}
    }
    int main() {
    	prework();
    	read(n);
    	cnt[0] = 1;
    	for (int i = 1; i <= n; i++) {
    		read(a[i]);
    		prexor ^= b[a[i]];
    		ans += cnt[prexor]++;
    	}
    	cout << ans;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    5627
    时间
    5000ms
    内存
    1024MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者