Pagini recente » Cod sursa (job #1518748) | Cod sursa (job #1198220) | Cod sursa (job #156638) | Cod sursa (job #1787340) | Cod sursa (job #2947043)
#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],divizibleSquared[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%(i*i) == 0)
ifDivSq[j] = true;
}
}
}
}
void findAnswer()
{
long long ans = n*(n-1)/2;
int cnt = 0;
for(int i=2;i<=maxVal;i++)
{
if(ifDivSq[i] == false)
{
cnt = 0;
for(int j=i;j<=maxVal;j = j + i)
{
if(frev[j] == true)
cnt++;
}
if(number[i] % 2 == 1)
ans = ans - (cnt * (cnt-1)/2);
else
ans = ans + (cnt * (cnt-1)/2);
}
}
g<<ans;
}
void solve()
{
makeCiur();
findAnswer();
}
int main()
{
citire();
solve();
}