309
Cerința
Se dă un şir cu n numere naturale nenule care sunt divizibile doar cu numerele prime 2, 3 sau 5. Determinaţi numărul secvenţelor din şir pentru care produsul elementelor este pătrat perfect.
Date de intrare
Fișierul de intrare produs3.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule divizibile doar cu numerele prime 2, 3 sau 5, separate prin spații.
Date de ieșire
Fișierul de ieșire produs3.out va conține pe prima linie numărul S, reprezentând numărul secvenţelor din şir pentru care produsul elementelor este pătrat perfect.
Restricții și precizări
1 ≤ n ≤ 1.000.000- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000
Exemplu
produs3.in
5 12 3 4 5 45
produs3.out
6
Explicație
În şirul dat sunt 6 secvenţe pentru care produsul elementelor este pătrat perfect:
12 , 312 , 3 , 445 , 454 , 5 , 4512 , 3 , 4 , 5 , 45
#include <bits/stdc++.h>
using namespace std;
ifstream cin("produs3.in");
ofstream cout("produs3.out");
int exp(int n , int x)
{
int c = 0;
while(n % x == 0)
{
n /= x;
c++;
}
return c;
}
int main()
{
int n , c2 = 0 , c3 = 0 , c5 = 0 , f[1001] = {0} , x;
unsigned long long c = 0;
cin >> n;
for(int i = 1 ; i <= n ; i++)
{
cin >> x;
c2 = (c2 + exp(x , 2)) % 2;
c3 = (c3 + exp(x , 3)) % 2;
c5 = (c5 + exp(x , 5)) % 2;
f[4*c2 + 2*c3 + c5]++;
//cout << 4*c2 + 2*c3 + c5 << endl;
}
c = f[0];
for(int i = 0 ; i <= 10 ; i++)
c = c + 1ll * f[i] * (f[i] - 1) / 2;
cout << c;
}
Comentarii