/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static int n = (int)1e6;
public static int[] smallestPrimeFact = new int[n + 1];
public static void smp(){
for(int i = 2; i <= n; i++){
smallestPrimeFact[i] = i;
}
for(int i
= 2; i
<= Math.
sqrt(n
); i
++){ if(smallestPrimeFact[i] == i){
for(int j = i*i; j <= n; j += i){
if(smallestPrimeFact[j] == j){
smallestPrimeFact[j] = i;
}
}
}
}
}
public static HashMap
<Integer, Integer
> function
(int vl
){ HashMap
<Integer, Integer
> map
= new HashMap
<>();
while(vl != 1){
int d = smallestPrimeFact[vl];
map.put(d, map.getOrDefault(d,0) + 1);
vl /= d;
}
return map;
}
{
// your code goes here
int N = 5;
int[] arr = {1, 36, 9, 4, 6};
smp();
HashMap
<Long, Long
> map
= new HashMap
<>();
for(int i = 0; i < N; i++){
HashMap
<Integer, Integer
> k
= function
(arr
[i
]);
long g = 1;
for(Map.
Entry<Integer, Integer
> en
: k.
entrySet()){ int key = en.getKey();
int freq = en.getValue();
if(freq % 2 != 0){
g *= key;
}
}
count += map.getOrDefault(g, 0L);
map.put(g, map.getOrDefault(g, 0L) + 1);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgaW50IG4gPSAoaW50KTFlNjsKCXB1YmxpYyBzdGF0aWMgaW50W10gc21hbGxlc3RQcmltZUZhY3QgPSBuZXcgaW50W24gKyAxXTsKIAoJcHVibGljIHN0YXRpYyB2b2lkIHNtcCgpewoJCglmb3IoaW50IGkgPSAyOyBpIDw9IG47IGkrKyl7CgkJCXNtYWxsZXN0UHJpbWVGYWN0W2ldID0gaTsKCQl9CiAKCQlmb3IoaW50IGkgPSAyOyBpIDw9IE1hdGguc3FydChuKTsgaSsrKXsKCQkJaWYoc21hbGxlc3RQcmltZUZhY3RbaV0gPT0gaSl7CgkJCQlmb3IoaW50IGogPSBpKmk7IGogPD0gbjsgaiArPSBpKXsKCQkJCQlpZihzbWFsbGVzdFByaW1lRmFjdFtqXSA9PSBqKXsKCQkJCQkJc21hbGxlc3RQcmltZUZhY3Rbal0gPSBpOyAKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgkKCXB1YmxpYyBzdGF0aWMgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBmdW5jdGlvbihpbnQgdmwpewoJCUhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwoJCQoJCXdoaWxlKHZsICE9IDEpewoJCQlpbnQgZCA9IHNtYWxsZXN0UHJpbWVGYWN0W3ZsXTsKCQkJbWFwLnB1dChkLCBtYXAuZ2V0T3JEZWZhdWx0KGQsMCkgKyAxKTsKCQkJdmwgLz0gZDsKCQl9CgkJcmV0dXJuIG1hcDsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCWludCBOID0gNTsKCQlpbnRbXSBhcnIgPSB7MSwgMzYsIDksIDQsIDZ9OwoJCQoJCUxvbmcgY291bnQgPSAwTDsKCQkKCQlzbXAoKTsKCQkKCQlIYXNoTWFwPExvbmcsIExvbmc+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKCQkKCQlmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKXsKCQkJSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBrID0gZnVuY3Rpb24oYXJyW2ldKTsKCQkJCgkJCWxvbmcgZyA9IDE7CgkJCQoJCQlmb3IoTWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+IGVuIDogay5lbnRyeVNldCgpKXsKCQkJCWludCBrZXkgPSBlbi5nZXRLZXkoKTsKCQkJCWludCBmcmVxID0gZW4uZ2V0VmFsdWUoKTsKCQkJCQoJCQkJaWYoZnJlcSAlIDIgIT0gMCl7CgkJCQkJZyAqPSBrZXk7CgkJCQl9CgkJCX0KCQkJCgkJCWNvdW50ICs9IG1hcC5nZXRPckRlZmF1bHQoZywgMEwpOwoJCQltYXAucHV0KGcsIG1hcC5nZXRPckRlZmF1bHQoZywgMEwpICsgMSk7CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbihjb3VudCk7Cgl9Cn0=