Cod sursa(job #2565332)

Utilizator dragossofiaSofia Dragos dragossofia Data 2 martie 2020 13:41:56
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
#define mod 9973
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

long long nr = 1 , sum = 1 , n ;

long long  exponentiere( int x , int p )
{
  if( p == 1 )
        return x ;
 if( p % 2 == 0 )
    {
     long long t = exponentiere( x , p  / 2 ) ;
     return ( 1LL * t * t  ) % mod ;

    }
 else
    {
     long long t = exponentiere( x , p  / 2 ) ;
     return ( ( 1LL * t * t  ) % mod ) * x % mod  ;
    }
}

long long invers ( int x )
{
  return exponentiere( x , mod - 2 ) ;
}

void desc( long long x )
{
  long long ct , d = 2 , p ;
  while( x != 1 )
    {
     p = 1;
     ct = 0 ;
     while( x % d == 0 )
        {
         x/=d;
         p = ( p * d ) % mod ;
         ct ++ ;
        }

     if( ct >= 0 )
        {
         nr = ( nr * ( ct + 1 ) ) % mod ;
         p = ( p * d ) % mod ;
         p = p - 1 ;
         sum *= ( p * invers( d - 1 ) ) % mod ;
        }
     d++;
     if( d * d > x )
            d = x ;
    }

}

int main()
{   int x ;
    fin >> n;
    for ( int  i = 1 ; i <= n ; i ++  )
        {
         fin >> x;
         desc( x ) ;
         fout << nr << " " << sum << "\n" ;
         sum = 1 ;
         nr = 1 ;
        }
    return 0;
}