Cod sursa(job #1058744)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 15 decembrie 2013 20:29:01
Problema Sum Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
using namespace std;

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

const int N=200001;
int e[N],c[N/2+1];
int prim[N/2+1];
bool r[N/2+1];

int main(){
    int n,nr=0,i,j,k,x,nrp=0,maxi=0;
    long long s;
    f>>x;
    for(k=1;k<=x;k++){
        f>>c[k];
        if(c[k]>maxi)
            maxi=c[k];
    }
    for(i=2 ; i*i<=maxi; i++)
        if(!r[i])
            for(j=i*i ; j<=maxi; j+=i)
                r[j] = true;
    for(i=2;i<=maxi;i++)
        if(r[i]==false){
            nrp++;
            prim[nrp]=i;
        }
    for(k=1;k<=x;k++){
        s=0;
        nr=0;
        n=c[k];
        if(r[n]==false)
            for(i=1;i<2*n;i++){
                if(i!=n)
                    s=s+i;
                }
        else{
            for(i=1;i<=2*n;i++)
                e[i]=i;
            for(i=1; i<=nrp ;i++)
                if(n%prim[i]==0)
                    for(j=prim[i];j<=2*n;j+=prim[i])
                        e[j]=e[j]/prim[i]*(prim[i]-1);
            for(i=1;i<2*n;i++)
                if(e[i]==i)
                    s=s+i;
        }
        g<<s<<"\n";
    }
    return 0;
}