Pagini recente » Cod sursa (job #2718996) | Cod sursa (job #495241) | Cod sursa (job #914072) | Cod sursa (job #520371) | Cod sursa (job #1018763)
#include <fstream>
#include <cstring>
#define maxn 100001
#define maxv 1000001
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int a[maxn],n,t,prod=1,f;
int fr[maxv],v[maxv];
int p[maxn],fac[maxn];
long long s,ans;
void erathostenes (int n)
{
t=1;
p[1] = 2;
for (int i=3; i<=n; i+=2)
{
if (!v[i])
{
p[++t] = i;
for (int j=i*i; j<=n; j+=i)
{
v[j] = 1;
}
}
}
}
void back (int k, int cnt)
{
for (int i=k; i<=f; ++i)
{
prod *= fac[i];
back (i+1,cnt+1);
prod /= fac[i];
}
if (cnt%2)
{
s += fr[prod];
}
else
{
s -= fr[prod];
}
if (prod!=1) fr[prod] ++;
}
int main()
{
fin>>n;
erathostenes (1000);
for (int i=1; i<=n; ++i)
{
fin>>a[i];
int x = a[i];
memset (fac,0,sizeof(fac));
f=0;
for (int i=1; i<=t && p[i]*p[i] <= x; ++i)
{
if (x%p[i]==0)
{
fac[++f] = p[i];
while (x%p[i]==0)
{
x /= p[i];
}
}
}
if (x!=1) fac[++f] = x;
s=0;
prod=1;
back (1,0);
ans += i-1 - s;
}
fout<<ans;
}