Pagini recente » Cod sursa (job #2502385) | Cod sursa (job #2782767) | Cod sursa (job #611475) | Cod sursa (job #3217671) | Cod sursa (job #2510970)
#include<fstream>
#include<vector>
#include<algorithm>
#define ll long long
#define pb(x) push_back(x)
using namespace std;
typedef pair<int,int> ii;
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]&1)
{
sol -= ((cnt*(cnt-1))>>1);
}
else
{
sol += ((cnt*(cnt-1))>>1);
}
}
}
fout<<sol;
return 0;
}