Cod sursa(job #1547666)

Utilizator SilviuIIon Silviu SilviuI Data 9 decembrie 2015 18:45:57
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#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;
}