Cod sursa(job #1058223)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 15 decembrie 2013 11:49:37
Problema Sum Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
using namespace std;

ifstream f("sum.in");
ofstream g("sum.out");

const int N=200001;
int e[N],v[68],c[N/2+1];
int prim[68]={-1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317};

int main(){
    int n,nr=0,i,j,s,k,x;
    f>>x;
    for(k=1;k<=x;k++)
        f>>c[k];
    for(k=1;k<=x;k++){
        s=0;
        nr=0;
        n=c[k];
        for(i=1;i<=2*n;i++)
            e[i]=i;
        for(i=1; prim[i]<=n && i<=67;i++)
            if(n% prim[i]==0){
                nr++;
                v[nr]=prim[i];
            }
        //for(i=1;i<=nr;i++)
        //    g<<v[i]<<" ";
        //g<<"\n";
        for(i=1;i<=nr;i++)
            if(e[v[i]]==v[i])
                for(j=v[i];j<=2*n;j+=v[i])
                    e[j]=e[j]/v[i]*(v[i]-1);
        for(i=1;i<=2*n;i++)
            if(e[i]==i)
                s=s+i;
        g<<s<<"\n";
    }
    return 0;
}