Cod sursa(job #1162655)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 31 martie 2014 21:49:47
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#define vmax 1000000
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
  bool ok[1000005];
   int p[80005],np,mod=9973;
   long long sact,sdiv,nrdiv,val,x;
 void Ciur()
 { int i,j;
     np=1; p[np]=2;

    for(i=3;i<=1000;i+=2)
     if (!ok[i])
       {
         for(j=i*i;j<=vmax;j+=2*i)
           ok[j]=1;
       }

    for(i=3;i<=vmax;i+=2)
     if (!ok[i]) {np++; p[np]=i;}
 }

 void Solve()
 { int i,pw;

     nrdiv=1; sdiv=1;

    for(i=1;p[i]*p[i]<=x && i<=np;i++)
     { pw=1; sact=1; val=p[i];
        while(x%p[i]==0)
         {
           pw++;
            sact+=val;
            val=(val*p[i])%mod;
          x/=p[i];
         }
       nrdiv=(nrdiv*pw)%mod;
       sdiv=(sdiv*sact)%mod;
     }

     if (x>1) {nrdiv=(nrdiv*2)%mod; sdiv=(sdiv*((x+1))%mod)%mod;}
  g<<nrdiv<<" "<<sdiv<<"\n";
 }

int main()
{ int i,t;
     Ciur();

      f>>t;
     for(;t;t--)
     { f>>x;
        Solve();
     }
    return 0;
}