Pagini recente » Cod sursa (job #1926145) | Cod sursa (job #602132) | Cod sursa (job #361906) | Cod sursa (job #2987039) | Cod sursa (job #918406)
Cod sursa(job #918406)
#include <fstream>
#include <vector>
#define VM 1000010
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int N, M;
int i, j;
int X;
vector<int> D[VM];
int Frec[VM];
int ANS;
bool V[VM];
int Count (int X)
{
int i, N=1 << D[X].size(), j;
int x;
int ANS=0;
int K;
for (i=1; i<N; i++)
{
x=1;
K=0;
for (j=0; (1 << j)<N; j++)
if ((i&(1 << j)))
x*=D[X][j], K++;
if (K%2)
ANS+=Frec[x];
else
ANS-=Frec[x];
}
return ANS;
}
void Update (int X)
{
int i, N=1 << D[X].size(), j;
int x;
for (i=1; i<N; i++)
{
x=1;
for (j=0; (1 << j)<N; j++)
if ((i&(1 << j)))
x*=D[X][j];
Frec[x]++;
}
}
void CreateD ()
{
int i, j;
for (i=2; i<VM; i++)
if (!V[i])
for (j=i; j<VM; j+=i)
{
D[j].push_back(i);
V[j]=1;
}
}
int main ()
{
CreateD();
f >> N;
for (i=1; i<=N; i++)
{
f >> X;
ANS+=i-1-Count(X);
Update(X);
}
g << ANS << '\n';
f.close();
g.close();
return 0;
}