Pagini recente » Cod sursa (job #172394) | Cod sursa (job #131079) | Cod sursa (job #2002868) | Cod sursa (job #2631664) | Cod sursa (job #3287764)
/*
____ ___ _ ___ ____ _
/ ___| / _ \| | |_ _/ ___| / \
\___ \| | | | | | | | / _ \
___) | |_| | |___ | | |___ / ___ \
|____/ \___/|_____|___\____/_/ \_\
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define pii pair<int,int>
const int NMAX = 1e5+9;
const int MMAX = 1e6+9;
const int MOD = 1e9+7;
int binpow(int n, int k)
{
if (k==0)
{
return 1;
}
int x=binpow(n,k/2)%MOD;
if (k%2==0)
{
return x*x%MOD;
}
else
{
return x*x%MOD*n%MOD;
}
}
int n,v[NMAX],i,j;
int nrdiv[MMAX];
int fr[MMAX];
vector<int>primes;
bitset<MMAX>ciur;
ifstream fin ("pairs.in");
ofstream fout ("pairs.out");
#define cin fin
#define cout fout
void run_case ()
{
cin>>n;
for (i=1; i<=n; i++)
{
cin>>v[i];
fr[v[i]]++;
}
for (i=2; i<MMAX; i++)
{
if (ciur[i]==0)
{
primes.pb (i);
for (j=i*2; j<MMAX; j+=i)
{
ciur[j]=1;
}
}
for (j=i; j<MMAX; j+=i)
{
nrdiv[i]+=fr[j];
}
}
sort (v+1,v+n+1);
int answer=0;
for (i=1; i<=n; i++)
{
vector<int>divs;
int contor=0,a=v[i];
while (a>1)
{
int p=0;
while (a%primes[contor]==0)
{
++p;
a/=primes[contor];
}
if (p)
{
divs.pb (primes[contor]);
}
contor++;
if (primes[contor]*primes[contor]>a && a>1)
{
break;
}
}
if (a>1)
{
divs.pb (a);
}
int cntr=divs.size();
int cans=0;
for (int mask=1; mask<(1<<cntr); mask++)
{
int cnr=1;
for (int j=0; j<cntr; j++)
{
if ((1<<j)&mask)
{
cnr*=divs[j];
}
}
if (__builtin_popcount (mask)%2==0)
{
cans-=nrdiv[cnr];
}
else
{
cans+=nrdiv[cnr];
}
}
answer+=(n-cans);
}
cout<<answer/2;
}
signed main ()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL),cout.tie (NULL);
int teste;
teste=1;
while (teste--)
{
run_case();
}
}