Pagini recente » Cod sursa (job #1933895) | Cod sursa (job #1999379) | Cod sursa (job #138630) | Cod sursa (job #2592927) | Cod sursa (job #918343)
Cod sursa(job #918343)
#include <fstream>
#define VM 1000010
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int N, M;
int i, j;
int X;
int D[10];
int Frec[VM];
int ANS;
int Count ()
{
int i, N=1 << M, 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[j+1], K++;
if (K%2)
ANS+=Frec[x];
else
ANS-=Frec[x];
}
return ANS;
}
void Update ()
{
int i, N=1 << M, j;
int x;
for (i=1; i<N; i++)
{
x=1;
for (j=0; (1 << j)<N; j++)
if ((i&(1 << j)))
x*=D[j+1];
Frec[x]++;
}
}
int main ()
{
f >> N;
for (i=1; i<=N; i++)
{
f >> X;
M=0;
for (j=2; j*j<=X; j++)
if (X%j==0)
{
D[++M]=j;
while (X%j==0)
X/=j;
}
if (X>1) D[++M]=X;
ANS+=i-1-Count();
Update();
}
g << ANS << '\n';
f.close();
g.close();
return 0;
}