Cod sursa(job #765529)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 8 iulie 2012 00:23:16
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<cstdio>
#define N 1000000
int o,nr,p[N],k,i,j,q,r,x[N];
long long n,t,s;
int main()
{freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&o),x[++k]=2;
for(i=1;((i*i)<<1)+(i<<1)<=N;i++)     
if(!(p[i>>3]&(1<<(i&7))))
      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))))
      x[++k]=2*i+1;
while(o--)
      {scanf("%d",&n);
      for(i=s=nr=1,t=n;t>1&&x[i]*x[i]<=t;i++)
              {for(j=0;t%x[i]==0;j++,t/=x[i]);
              if(j)
                       {nr*=(j+1);
                       if(j==1)
                               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*=(t+1);
      if(s==1)
              nr=2,s+=n;
      printf("%d %lld\n",nr,s%9973);}
return 0;}