Pagini recente » Cod sursa (job #2768601) | Cod sursa (job #3182729) | Cod sursa (job #3182725) | Cod sursa (job #2430956) | Cod sursa (job #1402320)
#include <cstdio>
#include <bitset>
#define filein "pairs.in"
#define fileout "pairs.out"
#define MAXN 100002
using namespace std;
bitset <MAXN> NotPrime;
bitset <MAXN> Used;
bitset <MAXN> BigPow;
int Divisors[MAXN];
int N;
int maxx;
long long Answer;
void ReadData();
void PrintData();
void Erathostenes();
int main()
{
ReadData();
Erathostenes();
register int i,j;
int x;
for (i=2; i<=maxx; i++)
{
if (!BigPow[i])
{
x=0;
for (j=i; j<=maxx; j+=i)
x+=Used[j];
if (Divisors[i]%2==0) Answer-=(long long)(x*(x-1)/2);
else Answer+=(long long)(x*(x-1)/2);
}
}
Answer=(long long)(N*(N-1)/2)-Answer;
PrintData();
return 0;
}
void ReadData()
{
FILE *in;
in=fopen(filein,"r");
fscanf(in,"%d",&N);
register int i;
int x;
for (i=1; i<=N; i++)
{
fscanf(in,"%d",&x);
Used[x]=1;
if (maxx<x) maxx=x;
}
fclose(in);
}
void PrintData()
{
FILE *out;
out=fopen(fileout,"w");
fprintf(out,"%lld",Answer);
fclose(out);
}
void Erathostenes()
{
register int i,j;
for (i=2; i<=maxx; i++)
{
if (!NotPrime[i])
for (j=i; j<=maxx; j+=i)
{
NotPrime[j]=1;
Divisors[j]++;
if (j%(i*i)==0) BigPow[j]=1;
}
}
}