Cod sursa(job #588040)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 6 mai 2011 19:31:12
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<fstream.h>
#include<math.h>
#define N 1000000
int o,nr,p[N]={0};
long long n,t,s;
long k=0,i,j,q,r,x[N];
int main()
{ifstream f("ssnd.in");
ofstream g("ssnd.out");
f>>o;
x[++k]=2;
for(i=1;((i*i)<<1)+(i<<1)<=N;i+=1)     
if((p[i>>3]&(1<<(i&7)))==0)
      {for(j=((i*i)<<1)+(i<<1);(j<<1)+1<=N;j+=(i<<1)+1)
             p[j>>3]|=(1<<(j&7));}
for(i=1;2*i+1<=N;++i)
if((p[i>>3]&(1<<(i&7)))==0)
      x[++k]=2*i+1;
while(o--)
      {f>>n;
      for(i=1,t=n,s=1,nr=1;t>1&&x[i]<=sqrt(t);i++)
              {j=0;
              while(t%x[i]==0)
                       {j++;
                       t/=x[i];}
              if(j!=0)
                       {nr=nr*(j+1);
                       if(j==1)
                               s=s*(x[i]+1);
                       else
                               {q=x[i]+1;
                               for(r=1;r<j;r++)
                                      q=q*x[i]+1;
                               s*=q;}}}
      if(t>1)
              {nr*=2;
              s=s*(t+1);}
      if(s==1)
              {nr=2;
              s+=n;}
      g<<nr<<" "<<s%9973<<"\n";}
f.close();
g.close();
return 0;}