Cod sursa(job #1319613)

Utilizator Adryan199Adrian Argint Adryan199 Data 17 ianuarie 2015 11:17:02
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
char v[1000009];
long long prime[200001],np;
int main ()
{
    long long t,a,c,s,i,j,m,e,p,x,y,z;
    for(i=1; i<=1000000; i++)
    {
        v[i]=0;
    }
    np=0;
    for(i=2; i<=1000000; i++)
    {
        if(v[i]==0)
        {
            prime[np+1]=i;
            np=np+1;
            v[i]=2;
            for(j=i*i; j<=1000000; j=j+i)
            {
                v[j]=1;
            }
        }
    }

    m=9973;
    fin>>t;
    for(i=1; i<=t; i++)
    {
        fin>>a;
        c=1;
        s=1;
        x=a;
        j=1;
        while(prime[j]*prime[j]<=x)
        {
         if(x%prime[j]==0)
         {
          e=0;
          while(x%prime[j]==0)
          {
              e=e+1;
              x=x/prime[j];
          }
          c=c*(e+1);
          p=1;
          y=prime[j];
          z=e+1;
          while(z!=0)
          {
              if(z%2==1)
              {
                  p=p*y;

              }
              y=y*y;
              z=z/2;
          }
          s=s*(p-1)/(prime[j]-1);
         }
         j=j+1;
        }
         if(x>1)
         {
             c=c*2;
             s=s*(x+1);

         }
        fout<<c<<" "<<s%m<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}