Cod sursa(job #880834)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 17 februarie 2013 13:43:51
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <math.h>
# define  mod 9973;
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int j,i,t,aux,k,a,nr,primi[1000010],p,p1,p2,h;
long long s,sol,q,l,n,y;
bool v[1000010];


  void ciur()
        {primi[1]=2;a=2;
        for(i=2;i<=1000005;++i)
            if(v[i]==0)
            {
            primi[a]=i;
            a++;
                for(j=i+i;j<=1000005;j=j+i)
                    v[j]=1;
            }
        }

   int  pow(int x,int p)
   {
    int rez = 1;
    x %= mod;

    for(; p; p >>= 1) {
        if(p & 1) {
            rez *= x;
            rez %= mod;
        }
       x *= x;
       x %= mod;
        }
    return rez;
   }
int main()
{
    ciur();
    in>>t;
    while(t)
    {
        s=1;nr=1;
        in>>n;
        for(i=1;n>=1LL*primi[i]*primi[i]&& i<=a;i++)
            {
              if(n%primi[i]==0)
              {
                p=0;
               while(n%primi[i]==0)
                    {
                        n=n/primi[i];
                        p++;
                    }

              nr=nr*(p+1);
              h=9971;
              p1=(pow(primi[i],p+1)-1)%mod;
              p2=pow(primi[i]-1,h) % mod;
              s=(s*p1)%mod;
              s=(s*p2)%mod;
                }
            }
        if(n>1)
        {
            nr*=2;
            s=s*(n+1)%mod;
        }
        out<<nr<<" "<<s<<'\n';
        t--;
     }
    in.close();
    out.close();
    return 0;
}