Pagini recente » Cod sursa (job #1808830) | Cod sursa (job #1142042) | Cod sursa (job #2863235) | Cod sursa (job #335299) | Cod sursa (job #3219874)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
bool da[1000001];
bool ciur[1000001];
vector<int> primi;
long long multiplii[1000001];
long long int n;
int x;
int maxim = 0;
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> x;
da[x] = 1;
maxim = max(maxim, x);
}
for (int i = 2; i <= maxim / i; i++)
{
if (!ciur[i])
{
primi.push_back(i);
for (int j = i * i; j <= maxim / j; j += i)
ciur[j] = true;
}
}
for (int i = 1; i <= maxim; i++)
{
if (da[i])
for (int j = i; j <= maxim; j += i)
{
if (da[j])
multiplii[i]++;
}
}
long long rez = 0;
for (int i = 1; i <= maxim; i++)
{
if (multiplii[i]>1)
{
int sclav = i;
int sclav_cnt = 0;
int sclav_numar = 0;
bool sclav_verificare = true;
while (sclav != 1)
{
int sclav_putere = 0;
while (sclav % primi[sclav_cnt]==0)
{
sclav /= primi[sclav_cnt];
sclav_putere++;
}
if (sclav_putere > 1)
{
sclav_verificare = false;
break;
}
if (sclav_putere == 1)
sclav_numar++;
if (++sclav_cnt == primi.size())
{
break;
}
}
if (sclav != 1)
sclav_numar++;
if (sclav_verificare)
{
if (sclav_numar % 2)
rez += multiplii[i] * (multiplii[i]-1) / 2;
else
rez -= multiplii[i] * (multiplii[i]-1) / 2;
}
}
}
fout<<n*(n-1)/2-rez;
}