Pagini recente » Cod sursa (job #1154133) | Cod sursa (job #1198428) | Cod sursa (job #2112712) | Cod sursa (job #2100481) | Cod sursa (job #359080)
Cod sursa(job #359080)
#include <fstream>
using namespace std;
#define MAX_N 100005
#define MAX_M 1000005
#define MAX_D 1005
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
int N, V[MAX_N], D[MAX_D], Nr[MAX_M];
long long Sol;
void citire()
{
fin >> N;
for(int i = 1; i <= N; ++i)
fin >> V[i];
}
void solve()
{
for(int i = 1; i <= N; ++i)
{
if((V[i] & 1) == 0)
{
D[ D[0] = 1 ] = 2;
for(;(V[i] & 1) == 0; V[i] >>= 1);
}
else
D[0] = 0;
int x = V[i];
for(int k = 3; k*k <= V[i]; k+=2)
if((x % k) == 0)
for(D[ ++D[0] ] = k; (x % k) == 0; x /= k);
if(x > 1) D[ ++D[0] ] = x;
int T = (1 << D[0]), nr = 0;
for(int k = 1; k < T; ++k)
{
int nrb = 0, p = 1;
for(int j = 0; j < D[0]; ++j)
if(k & (1 << j))
++nrb,
p*=D[j+1];
if(nrb & 1) nr += Nr[p];
else nr -= Nr[p];
++Nr[p];
}
Sol += (i-1-nr);
}
fout << Sol << "\n";
}
int main()
{
citire();
solve();
}