Pagini recente » Cod sursa (job #1875840) | Cod sursa (job #51068) | Cod sursa (job #506968) | Cod sursa (job #2877809) | Cod sursa (job #3266044)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int n, x, i, divi[1000005], j, maxim, fr[1000005], ciur[1000005];
vector <int> prim;
long long ans;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fin>>n;
ciur[0]=ciur[1]=1;
for(i=2; i*i<=1e6; i++)
if(ciur[i]==0)
{
for(j=i*i; j<=1e6; j+=i)
ciur[j]=1;
}
for(i=2; i<=1e6; i++)
if(!ciur[i])
prim.push_back(i);
for(i=1; i<=n; i++)
{
fin>>x;
int cx=x;
int d=prim[0], k=0;
vector <int> frp;
while(x>1)
{
if(x%d==0)
{
frp.push_back(d);
while(x%d==0)
x/=d;
}
k++;
d=prim[k];
if(prim[k]*prim[k]>x && x>1)
d=prim[k];
}
k=frp.size();
for(int mask=1; mask<(1<<k); mask++)
{
int nr=0, pr=1;
for(j=0; j<k; j++)
if(mask&(1<<j))
{
nr++;
pr*=frp[j];
}
if(nr!=0)
{
if(nr%2)
ans+=fr[pr];
else
ans-=fr[pr];
}
fr[pr]++;
}
}
fout<<n*(n-1)/2-ans;
return 0;
}