#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long int
const int MOD = 1000000007;
const int MOD2 = 998244353;
const int INF = LLONG_MAX / 2;
const int MAXN = 100000;
int primes[1000000];
/*void seive() {
fill(primes, primes + 1000000, 1);
primes[0] = primes[1] = 0;
for (int i = 2; i * i < 1000000; i++) {
if (primes[i]) {
for (int j = i * i; j < 1000000; j += i) {
primes[j] = 0;
}
}
}
}
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int gcd(int a, int b) {
if (a == 0) return b;
return gcd(b % a, a);
}*/
int power(int a, int b, int mod) {
int res = 1;
a %= mod;
while (b > 0) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
// nCr % MOD for n < MOD
int nCrModP(int n, int r) {
if (r > n) return 0;
if (r == 0 || r == n) return 1;
int numerator = 1, denominator = 1;
for (int i = 0; i < r; i++) {
numerator = (numerator * (n - i)) % MOD;
denominator = (denominator * (i + 1)) % MOD;
}
return (numerator * power(denominator, MOD - 2, MOD)) % MOD;
}
// Lucas's Theorem
int lucas(int n, int r) {
if (r == 0) return 1;
return (lucas(n / MOD, r / MOD) * nCrModP(n % MOD, r % MOD)) % MOD;
}
void primefactorisation(int n , unordered_map<int,int>&m){
for(int i = 2 ; i<=sqrt(n) ; i++){
if(n%i==0){
int cnt = 0;
while(n%i==0){
cnt++;
n /= i;
}
if(cnt%2!=0){
m[i]++;
}
}
}
if(n>1){
m[n]++;
}
}
void dfs(int node , bool visited[] , vector<int>A[] , int values[] , int &c , unordered_map<int,int>&m1){
visited[node] = true;
c = c+m1[values[node]];
m1[values[node]]++;
for(auto node1 : A[node]){
if(!visited[node1]){
visited[node1] = true;
dfs(node1,visited,A,values,c,m1);
}
}
m1[values[node]]--;
}
void solve() {
int n;
cin>>n;
int values[n];
for(int i = 0 ; i<n ; i++){
cin>>values[i];
unordered_map<int,int>m;
primefactorisation(values[i],m);
int ans = 1;
for(auto i:m){
if(i.second%2!=0){
ans *= i.first;
}
}
values[i] = ans;
m.clear();
}
vector<int>A[n];
bool visited[n+1];
fill(visited,visited+n,false);
unordered_map<int,int>m1;
int c = 0;
for(int i = 0 ; i<n-1 ; i++){
int a,b;
cin>>a>>b;
A[a].push_back(b);
A[b].push_back(a);
}
dfs(0,visited,A,values,c,m1);
cout<<c<<endl;
}
signed main() {
ios::sync_with_stdio(false); cin.tie(NULL);
//int t;
//cin >> t;
//while (t--) {
solve();
//}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBpbnQgbG9uZyBsb25nIGludApjb25zdCBpbnQgTU9EID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE1PRDIgPSA5OTgyNDQzNTM7CmNvbnN0IGludCBJTkYgPSBMTE9OR19NQVggLyAyOwpjb25zdCBpbnQgTUFYTiA9IDEwMDAwMDsKaW50IHByaW1lc1sxMDAwMDAwXTsKCi8qdm9pZCBzZWl2ZSgpIHsKICAgIGZpbGwocHJpbWVzLCBwcmltZXMgKyAxMDAwMDAwLCAxKTsKICAgIHByaW1lc1swXSA9IHByaW1lc1sxXSA9IDA7CiAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPCAxMDAwMDAwOyBpKyspIHsKICAgICAgICBpZiAocHJpbWVzW2ldKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBpICogaTsgaiA8IDEwMDAwMDA7IGogKz0gaSkgewogICAgICAgICAgICAgICAgcHJpbWVzW2pdID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKYm9vbCBpc1ByaW1lKGludCBuKSB7CiAgICBpZiAobiA8PSAxKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKG4gJSBpID09IDApIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgZ2NkKGludCBhLCBpbnQgYikgewogICAgaWYgKGEgPT0gMCkgcmV0dXJuIGI7CiAgICByZXR1cm4gZ2NkKGIgJSBhLCBhKTsKfSovCgppbnQgcG93ZXIoaW50IGEsIGludCBiLCBpbnQgbW9kKSB7CiAgICBpbnQgcmVzID0gMTsKICAgIGEgJT0gbW9kOwogICAgd2hpbGUgKGIgPiAwKSB7CiAgICAgICAgaWYgKGIgJiAxKSByZXMgPSByZXMgKiBhICUgbW9kOwogICAgICAgIGEgPSBhICogYSAlIG1vZDsKICAgICAgICBiID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKLy8gbkNyICUgTU9EIGZvciBuIDwgTU9ECmludCBuQ3JNb2RQKGludCBuLCBpbnQgcikgewogICAgaWYgKHIgPiBuKSByZXR1cm4gMDsKICAgIGlmIChyID09IDAgfHwgciA9PSBuKSByZXR1cm4gMTsKCiAgICBpbnQgbnVtZXJhdG9yID0gMSwgZGVub21pbmF0b3IgPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByOyBpKyspIHsKICAgICAgICBudW1lcmF0b3IgPSAobnVtZXJhdG9yICogKG4gLSBpKSkgJSBNT0Q7CiAgICAgICAgZGVub21pbmF0b3IgPSAoZGVub21pbmF0b3IgKiAoaSArIDEpKSAlIE1PRDsKICAgIH0KICAgIHJldHVybiAobnVtZXJhdG9yICogcG93ZXIoZGVub21pbmF0b3IsIE1PRCAtIDIsIE1PRCkpICUgTU9EOwp9CgovLyBMdWNhcydzIFRoZW9yZW0KaW50IGx1Y2FzKGludCBuLCBpbnQgcikgewogICAgaWYgKHIgPT0gMCkgcmV0dXJuIDE7CiAgICByZXR1cm4gKGx1Y2FzKG4gLyBNT0QsIHIgLyBNT0QpICogbkNyTW9kUChuICUgTU9ELCByICUgTU9EKSkgJSBNT0Q7Cn0Kdm9pZCBwcmltZWZhY3RvcmlzYXRpb24oaW50IG4gLCB1bm9yZGVyZWRfbWFwPGludCxpbnQ+Jm0pewogICAgZm9yKGludCBpID0gMiA7IGk8PXNxcnQobikgOyBpKyspewogICAgICAgIGlmKG4laT09MCl7CiAgICAgICAgICAgIGludCBjbnQgPSAwOwogICAgICAgICAgICB3aGlsZShuJWk9PTApewogICAgICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgICAgbiAvPSBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGNudCUyIT0wKXsKICAgICAgICAgICAgICAgIG1baV0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmKG4+MSl7CiAgICAgICAgbVtuXSsrOwogICAgfQp9CnZvaWQgZGZzKGludCBub2RlICwgYm9vbCB2aXNpdGVkW10gLCB2ZWN0b3I8aW50PkFbXSAsIGludCB2YWx1ZXNbXSAsIGludCAmYyAsIHVub3JkZXJlZF9tYXA8aW50LGludD4mbTEpewogICAgdmlzaXRlZFtub2RlXSA9IHRydWU7CiAgICBjID0gYyttMVt2YWx1ZXNbbm9kZV1dOwogICAgbTFbdmFsdWVzW25vZGVdXSsrOwogICAgZm9yKGF1dG8gbm9kZTEgOiBBW25vZGVdKXsKICAgICAgICBpZighdmlzaXRlZFtub2RlMV0pewogICAgICAgICAgICB2aXNpdGVkW25vZGUxXSA9IHRydWU7CiAgICAgICAgICAgIGRmcyhub2RlMSx2aXNpdGVkLEEsdmFsdWVzLGMsbTEpOwogICAgICAgIH0KICAgIH0KICAgIG0xW3ZhbHVlc1tub2RlXV0tLTsKfQp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBjaW4+Pm47CiAgICBpbnQgdmFsdWVzW25dOwogICAgZm9yKGludCBpID0gMCA7IGk8biA7IGkrKyl7CiAgICAgICAgY2luPj52YWx1ZXNbaV07CiAgICAgICAgdW5vcmRlcmVkX21hcDxpbnQsaW50Pm07CiAgICAgICAgcHJpbWVmYWN0b3Jpc2F0aW9uKHZhbHVlc1tpXSxtKTsKICAgICAgICBpbnQgYW5zID0gMTsKICAgICAgICBmb3IoYXV0byBpOm0pewogICAgICAgICAgIGlmKGkuc2Vjb25kJTIhPTApewogICAgICAgICAgICAgIGFucyAqPSBpLmZpcnN0OwogICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFsdWVzW2ldID0gYW5zOwogICAgICAgIG0uY2xlYXIoKTsKICAgIH0KICAgIHZlY3RvcjxpbnQ+QVtuXTsKICAgIGJvb2wgdmlzaXRlZFtuKzFdOwogICAgZmlsbCh2aXNpdGVkLHZpc2l0ZWQrbixmYWxzZSk7CiAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+bTE7CiAgICBpbnQgYyA9IDA7CiAgICBmb3IoaW50IGkgPSAwIDsgaTxuLTEgOyBpKyspewogICAgICAgaW50IGEsYjsKICAgICAgIGNpbj4+YT4+YjsKICAgICAgIEFbYV0ucHVzaF9iYWNrKGIpOwogICAgICAgQVtiXS5wdXNoX2JhY2soYSk7CiAgICB9CiAgICBkZnMoMCx2aXNpdGVkLEEsdmFsdWVzLGMsbTEpOwogICAgY291dDw8Yzw8ZW5kbDsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CiAgICAvL2ludCB0OwogICAgLy9jaW4gPj4gdDsKICAgIC8vd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICAvL30KICAgIHJldHVybiAwOwp9Cg==