#include<bits/stdc++.h>
using namespace std;
int main(){
int n ; cin >> n;
vector<int> nums(n);
for(int &num : nums) cin >> num;
int maxE = *max_element(nums.begin() , nums.end());
// build SPF array
vector<int> SPF(maxE + 1);
iota(SPF.begin() , SPF.end() , 0);
for(int num = 2 ; num * num <= maxE ; num++){
if(SPF[num] == num){
for(int F = num * num ; F <= maxE ; F += num) if(SPF[F] == F) SPF[F] = num;
}
}
// map every prime number to its positon/index
int primeId = 0;
vector<int> primeIndex(maxE + 1);
for(int num = 2 ; num <= maxE ; num++){
if(SPF[num] == num) primeIndex[num] = primeId++;
}
long long subarrays = 0;
bitset<9600> prod = 0;
unordered_map<bitset<9600> , int> prefixCnt = { {prod , 1} };
for(int num : nums){
int curr = num;
while(curr != 1){
int prime = SPF[curr];
int expo = 0;
while(curr % prime == 0){
curr /= prime;
expo += 1;
}
if(expo & 1) prod.flip(primeIndex[prime]);
}
subarrays += prefixCnt[prod]++;
}
cout << subarrays;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCl7CiAgICBpbnQgbiA7IGNpbiA+PiBuOwoKICAgIHZlY3RvcjxpbnQ+IG51bXMobik7CiAgICBmb3IoaW50ICZudW0gOiBudW1zKSBjaW4gPj4gbnVtOwoKICAgIGludCBtYXhFID0gKm1heF9lbGVtZW50KG51bXMuYmVnaW4oKSAsIG51bXMuZW5kKCkpOwogICAgCiAgICAvLyBidWlsZCBTUEYgYXJyYXkKICAgIHZlY3RvcjxpbnQ+IFNQRihtYXhFICsgMSk7CiAgICBpb3RhKFNQRi5iZWdpbigpICwgU1BGLmVuZCgpICwgMCk7CgogICAgZm9yKGludCBudW0gPSAyIDsgbnVtICogbnVtIDw9IG1heEUgOyBudW0rKyl7CiAgICAJaWYoU1BGW251bV0gPT0gbnVtKXsKICAgIAkJZm9yKGludCBGID0gbnVtICogbnVtIDsgRiA8PSBtYXhFIDsgRiArPSBudW0pIGlmKFNQRltGXSA9PSBGKSBTUEZbRl0gPSBudW07CiAgICAJfQogICAgfQoJCiAgICAvLyBtYXAgZXZlcnkgcHJpbWUgbnVtYmVyIHRvIGl0cyBwb3NpdG9uL2luZGV4CiAgICBpbnQgcHJpbWVJZCA9IDA7CiAgICB2ZWN0b3I8aW50PiBwcmltZUluZGV4KG1heEUgKyAxKTsKICAgIGZvcihpbnQgbnVtID0gMiA7IG51bSA8PSBtYXhFIDsgbnVtKyspewogICAgCWlmKFNQRltudW1dID09IG51bSkgcHJpbWVJbmRleFtudW1dID0gcHJpbWVJZCsrOwogICAgfQoKICAgIGxvbmcgbG9uZyBzdWJhcnJheXMgPSAwOwoKICAgIGJpdHNldDw5NjAwPiBwcm9kID0gMDsKICAgIHVub3JkZXJlZF9tYXA8Yml0c2V0PDk2MDA+ICwgaW50PiBwcmVmaXhDbnQgPSB7IHtwcm9kICwgMX0gfTsKCiAgICBmb3IoaW50IG51bSA6IG51bXMpewogICAgCWludCBjdXJyID0gbnVtOwogICAgICAgIHdoaWxlKGN1cnIgIT0gMSl7CiAgICAgICAgICAgIGludCBwcmltZSA9IFNQRltjdXJyXTsKICAgICAgICAgICAgaW50IGV4cG8gPSAwOwogICAgICAgICAgICB3aGlsZShjdXJyICUgcHJpbWUgPT0gMCl7CiAgICAgICAgICAgICAgICBjdXJyIC89IHByaW1lOwogICAgICAgICAgICAgICAgZXhwbyArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGV4cG8gJiAxKSBwcm9kLmZsaXAocHJpbWVJbmRleFtwcmltZV0pOwogICAgICAgIH0KICAgICAgICBzdWJhcnJheXMgKz0gcHJlZml4Q250W3Byb2RdKys7CiAgICB9CgogICAgY291dCA8PCBzdWJhcnJheXM7CgogICAgcmV0dXJuIDA7Cn0=