Pagini recente » Cod sursa (job #295978) | Cod sursa (job #1276800) | Cod sursa (job #2998932) | Cod sursa (job #1694379) | Cod sursa (job #1547666)
#include <stdio.h>
#include <cstring>
#include <vector>
#define nmax 1010
#define lmax 1000010
using namespace std;
int n,x,i,j,k,fr[nmax],nrp,prim[nmax],viz[lmax],v[nmax],nr,xx;
unsigned int sol;
vector <int> factor[lmax];
int main() {
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n); fr[1]=1;
for (i=2;i*i<nmax;i++)
if (fr[i]==0) {
for (j=i*i;j<nmax;j+=i) fr[j]=1;
}
nrp=1; prim[nrp]=2;
for (i=3;i<nmax;i+=2)
if (fr[i]==0) nrp++,prim[nrp]=i;
nr=0;
for (i=1;i<=n;i++) {
scanf("%d",&x); j=1; xx=x; nr=0;
memset(viz,0,sizeof(viz));
while (x>1 && j<=nrp && prim[j]*prim[j]<=x) {
int l=0;
while (x%prim[j]==0) { l++; x=x/prim[j]; }
if (l>0) {
nr++; v[nr]=prim[j];
}
j++;
}
if (x>1) nr++,v[nr]=x;
x=i-1;
for (j=1;j<=nr;j++) {
for (k=0;k<factor[v[j]].size();k++) {
viz[factor[v[j]][k]]++;
if (viz[factor[v[j]][k]]==1) x--;
}
}
sol=sol+x;
}
printf("%d",sol);
return 0;
}