Cod sursa(job #2001515)

Utilizator VarticeanNicolae Varticean Varticean Data 16 iulie 2017 23:00:55
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#define ll long long
#define M 1000009
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int prim[M],k;
int pow(int x,int m)
{
    ll p=1;
    while (m>0)
    {
    if(m%2)
    {
        p=(p*x)%9973;
        m--;
    }
        x=(x*x)%9973;
        m/=2;
    }
    return p;
}
void ciur()
{
 bool a[M];
 for( int i=2; i<=M; i++)
      a[i]=1;
     for(int i=2; i<=M; i++)
        {
        if(a[i])
        for(int j=2*i; j<=M; j+=i )
          a[j]=0;
          if( i*i>M ) break;
        }

     for(int i=2; i<=M; i++)
        if(a[i]) prim[++k]=i;
}
int main()
{
    ciur();
    ll n,x;
    in>>n;
    for(;n;n--)
    {
        ll sum=1, nr=1, i=1;
        in>>x;
        while(x>1)
        {
            ll exp=0;
            if(x%prim[i]==0)
            {
               while(x%prim[i]==0 )
                {
                 exp++;
                 x/=prim[i];
                }
              nr*=(exp+1);
              sum=( sum*(pow(prim[i],exp+1)-1)*pow(prim[i]-1,9971))%9973;
            }
            i++;
        }
        out<<nr<<' '<<sum<<'\n';
    }


    return 0;
}