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:
Students Initiation
Landmarks
AND Graph
Prüfer code
To Hack or not to Hack
File Name
Tanya and Password
Sorting by Subsequences
Red Blue Tree
Sherlock and the Encrypted Data
Minimum spanning tree - Prim's algorithm
Oh Sweet Beaverette
Fibonacci-ish II
Context Advertising
Independent Set
Permutation Game
The Maths Lecture
15 Puzzle Game: Existence Of The Solution
Xenon's Attack on the Gangs
Floyd-Warshall - finding all shortest paths
Special Task
Maximum flow - MPM algorithm
Biridian Forest
The Brand New Function
Lost Array
Challenging Balloons
Equalize
Limericks
Bacterial Melee
Weird Game
New Year and Three Musketeers
Nagini