Cod sursa(job #1224146)

Utilizator Narcis_NeculaNecula Narcis Narcis_Necula Data 29 august 2014 22:25:44
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.08 kb
#include <fstream>
#define ll long long
#define MOD 9973
using namespace std;
 int t,np,e[80000],nf;
 ll p[80000],f[80000];
 bool c[1000001];
 void ciur()
 {
     p[0]=2;
     for(int i=3;i<1000000;i+=2)
     if(!c[i])
     {
          p[++np]=i;
          if(i<1000)
          for(int j=i*i;j<1000000;j+=i<<1)
          c[j]=1;
          }
          }
          ll pow(ll n,ll p)
          {
              ll sol=1;
              while(p)
              {
                  if(p&1)
                   sol*=n;
                    n*=n;
                     p=p>>1;
                     }
                     return sol;
                     }
                     int main()
                     {
                         ifstream fin("ssnd.in");
                         ofstream fout("ssnd.out");
                         ll n,i,s,nr;
                         ciur();
                         fin>>t;
                          while(t--)
                          {
                              fin>>n;
                               nf=-1;
                               for(i=0;i<=np && p[i]*p[i]<=n;++i)
                                          if(!(n%p[i]))
                                          {
                                               f[++nf]=p[i];

                                                          e[nf]=0;
           while(!(n%p[i]))
           {
                n/=p[i];
                ++e[nf];
                }
                 }
                  if(n>1)
                  {
                      f[++nf]=n;
                       e[nf]=1;
                        }
                         nr=s=1;
                          for(i=0;i<=nf;++i)
                           {
                               nr*=e[i]+1;
                                s=(s*( (e[i]==1) ? (f[i]+1) : ((pow(f[i],e[i]+1)-1)/(f[i]-1)) ))% MOD;
                                }
                                fout<<nr<<" "<<s<<"\n";
                                }
                                return 0;
                                }