You are given $n$ positive integers $a_1, \ldots, a_n$, and an integer $k \geq 2$. Count the number of pairs $i, j$ such that $1 \leq i < j \leq n$, and there exists an integer $x$ such that $a_i \cdot a_j = x^k$.
Input
The first line contains two integers $n$ and $k$ ($2 \leq n \leq 10^5$, $2 \leq k \leq 100$).
The second line contains $n$ integers $a_1, \ldots, a_n$ ($1 \leq a_i \leq 10^5$).
Output
Print a single integer — the number of suitable pairs.
Example input
6 3 1 3 9 8 24 1
output
5
Note
In the sample case, the suitable pairs are:
- $a_1 \cdot a_4 = 8 = 2^3$;
- $a_1 \cdot a_6 = 1 = 1^3$;
- $a_2 \cdot a_3 = 27 = 3^3$;
- $a_3 \cdot a_5 = 216 = 6^3$;
- $a_4 \cdot a_6 = 8 = 2^3$.
Solution:
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
const int MAX = 100010;
vector<int> p(MAX);
iota(p.begin(), p.end(), 0);
for (int i = 2; i < MAX; i++) {
if (p[i] == i) {
for (int j = i + i; j < MAX; j += i) {
if (p[j] == j) {
p[j] = i;
}
}
}
}
int n, k;
cin >> n >> k;
vector<int> cnt(MAX);
long long ans = 0;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
int res = 1;
long long ask = 1;
while (x > 1) {
int y = p[x];
int cc = 0;
while (x % y == 0) {
x /= y;
++cc;
}
cc %= k;
for (int j = 0; j < cc; j++) {
res *= y;
}
for (int j = 0; j < (k - cc) % k; j++) {
ask *= y;
ask = min(ask, MAX - 1LL);
}
}
ans += cnt[ask];
++cnt[res];
}
cout << ans << '\n';
return 0;
}
Related posts:
Processing Queries
Giải Thuật Và Lập Trình - Lê Minh Hoàng
Flowers
Let's Play Osu!
Gotta Go Fast
Palisection
Vanya and Cubes
Point location in O(log n)
Aztec Catacombs
Number Transformation
Kay and Snowflake
Parity
Petr and Permutations
Prefix Enlightenment
Finding Intersection of Two Segments
Game with Strings
Big Problems for Organizers
Một số vấn đề đáng chú ý trong môn Tin học - Phan Công Minh
Finding common tangents to two circles
Alex and a TV Show
New Year and Conference
Lowest Common Ancestor - Binary Lifting
Maximum flow - Dinic's algorithm
Nearest Leaf
Born This Way
Two Teams Composing
Cunning Gena
Practice
The Values You Can Make
Fox And Travelling
MP3
Orac and Game of Life