Pagini recente » Cod sursa (job #463194) | Borderou de evaluare (job #3136384) | Borderou de evaluare (job #2849062) | Borderou de evaluare (job #2912204) | Cod sursa (job #2516023)
#include<fstream>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
const int lim = 1e5+5;
const int lim_val = 1e6+5;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
bool f[lim_val];
int viz[lim_val],nrdiv[lim_val];
int main()
{
ll i,j;
int maxx = 1;
ll n;
fin>>n;
ll sol = n*(n-1)/2;
for(i = 1 ; i <= n ; ++i)
{
int x;
fin>>x;
f[x]++;
maxx = max(maxx , x);
}
for(i = 2 ; i <= maxx ; ++i)
{
if(nrdiv[i] == 0)
{
for(j = i ; j <= maxx ; j+= i)
nrdiv[j]++;
for(j = i*i ; j <= maxx ; j += i*i)
viz[j] = 1;
}
if(viz[i] == 0)
{
ll cnt = 0;
for(j = i ; j <= maxx ; j += i)
{
cnt += f[j];
}
if(nrdiv[i]%2==1)
{
sol -= ((cnt*(cnt-1))>>1);
}
else
{
sol += ((cnt*(cnt-1))>>1);
}
}
}
fout<<sol;
return 0;
}