Cod sursa(job #1757964)

Utilizator nnnmmmcioltan alex nnnmmm Data 16 septembrie 2016 10:22:09
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<bitset>

const int NMAX=100002;

std::bitset<NMAX> neprim;
int phi[NMAX];

void Ciur(int n)
{
 neprim[1]=true;
 for(int i=2;i*i<=n;i++)
     {
      if(neprim[i])
         continue;
      for(int j=i*i;j<=n;j+=i)
          {
           neprim[j]=true;
          }
     }
}

void Euler(int n)
{
 for(int i=1;i<=n;i++)
     phi[i]=i;
 for(int i=2;i<=n;i++)
     {
      if(neprim[i])
         continue;
      for(int j=i;j<=n;j+=i)
          phi[j]-=phi[j]/i;
     }
}

int Rasp(int x)
{
 return 2*phi[x]*x;
}

int main()
{
 Ciur(NMAX);
 Euler(NMAX);
 FILE *in=fopen("sum.in","r");
 int n;
 fscanf(in,"%d ",&n);
 FILE *out=fopen("sum.out","w");
 for(int i=1;i<=n;i++)
     {
      int x;
      fscanf(in,"%d ",&x);
      fprintf(out,"%d\n",Rasp(x));
     }
 fclose(in);
 fclose(out);
 return 0;
}