Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products

链接:

https://codeforces.com/contest/1247/problem/D

题意:

You are given n positive integers a1,…,an, and an integer k≥2. Count the number of pairs i,j such that 1≤i<j≤n, and there exists an integer x such that ai⋅aj=xk.

思路:

对每个数质数拆分,记录质数的指数modk的值,map记录vector神仙操作。。。

代码:

//#include <iostream>
//#include <fstream>
//#include <process.h>
//#include "ch08/ch08Func.cpp"
#include <bits/stdc++.h>
typedef long long LL;
using namespace std;

int n, k;

map<vector<pair<int, int>>, int> Mp;

int main()
{
    ios::sync_with_stdio(false);
    LL res = 0;
    int val;
    cin >> n >> k;
    for (int i = 1;i <= n;i++)
    {
        vector<pair<int, int> > v1, v2;
        cin >> val;
        for (int j = 2;j*j <= val;j++)
        {
            int _ = 0;
            if (val%j == 0)
            {
                while (val%j == 0)
                {
                    val /= j;
                    _++;
                }
            }
            if (_%k)
                v1.emplace_back(j, _%k);
        }
        if (val > 1)
            v1.emplace_back(val, 1);
        for (auto v: v1)
            v2.emplace_back(v.first, k-v.second);
        res += Mp[v2];
        Mp[v1]++;
    }
    cout << res << endl;

    return 0;
}
原文地址:https://www.cnblogs.com/YDDDD/p/11772340.html