Pagini recente » Cod sursa (job #338527) | Cod sursa (job #331535) | Cod sursa (job #689847) | Cod sursa (job #137765) | Cod sursa (job #2948475)
#include<iostream>
#include<fstream>
#define NMAX 1000005
using namespace std;
ifstream f("pairs.in");
ofstream g("pairs.out");
int n;
int maxVal;
bool frev[NMAX],ciur[NMAX],ifDivSq[NMAX];
int number[NMAX];
void citire()
{
f>>n;
int x;
for(int i=1;i<=n;i++)
{
f>>x;
frev[x] = true;
maxVal = max(x,maxVal);
}
}
void makeCiur()
{
for(int i=2;i<=maxVal/2;i++)
{
if(ciur[i] == false)
{
number[i] = 1;
for(int j = i*2;j <= maxVal; j = j + i)
{
number[j]++;
ciur[j] = true;
if(j%(1LL*(i*i)) == 0)
ifDivSq[j] = true;
}
}
}
}
void findAnswer()
{
long long ans = 1LL * n*(n-1)/2;
int cnt = 0;
for(int i=2;i<=maxVal;i++)
{
if(ifDivSq[i])
{
continue;
}
cnt = 0;
for(int j=i;j<=maxVal;j = j + i)
{
if(frev[j] == true)
cnt++;
}
long long val = 1LL *(cnt * (cnt-1)/2);
if(number[i] % 2 == 1)
ans = ans - val;
else
ans = ans + val;
}
g<<ans;
}
void solve()
{
makeCiur();
findAnswer();
}
int main()
{
citire();
solve();
}