Pagini recente » Cod sursa (job #1142891) | Cod sursa (job #2212909) | Cod sursa (job #1796286) | Cod sursa (job #243965) | Cod sursa (job #102395)
Cod sursa(job #102395)
Utilizator |
Adrian Diaconu DITzoneC |
Data |
14 noiembrie 2007 12:57:23 |
Problema |
Pairs |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.82 kb |
#include <stdio.h>
#include <assert.h>
#include <algorithm>
using namespace std;
#define nmax 100111
#define lmax 1000111
#define FOR(i,s,d) for(i=(s);i<(d);++i)
typedef long long lint;
int n,A[lmax],B[lmax];
lint sol;
char viz[lmax],nt[lmax];
int main()
{
int i,j,x;
assert(freopen("pairs.in","r",stdin));
freopen("pairs.out","w",stdout);
assert(scanf("%d",&n)==1);
assert(n<=100000);
assert(n>=2);
FOR(i,0,n)
{
assert(scanf("%d",&x)==1);
assert(x<=1000000);
assert(x>=1);
viz[x]=1;
}
FOR(i,2,lmax)
{
for(j=i;j<lmax;j+=i)
if(viz[j])
B[i]++;
if(A[i])
continue;
for(j=i;j<lmax;j+=i)
if((j/i)%i==0)
nt[j]=1;
else
A[j]++;
}
FOR(i,2,lmax)
if(!nt[i])
if(A[i]&1)
sol+=(lint)B[i]*(B[i]-1)/2;
else
sol-=(lint)B[i]*(B[i]-1)/2;
printf("%lld\n",(lint)n*(n-1)/2-sol);
return 0;
}