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:
Robots protection
Well-known Numbers
Good Substrings
Boolean Computer
Oppa Funcan Style Remastered
New Year Book Reading
Palindrome
Finding repetitions
Salazar Slytherin's Locket
Potions Homework
Information Graph
Cartoons
2 - SAT
Half-plane intersection - S&I Algorithm in O(Nlog N)
Game with Strings
Property
Fox And Polygon
Cut the pie
Composite Coloring
Gotta Go Fast
Transmitting Levels
Bear and Poker
Voting for Photos
Kind Anton
Rabin-Karp Algorithm for string matching
Square Difference
Balls and Boxes
Floyd-Warshall - finding all shortest paths
Finding the largest zero submatrix
Euclidean algorithm for computing the greatest common divisor
Mirror Box
Scaygerboss