Cod sursa(job #872142)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 5 februarie 2013 20:29:24
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include<stdio.h>
#include<math.h>
#define MOD 9973
long long t , v [ 100007 ] , put [ 100007 ] , n;
void desc ( long long n )
{
    int d , nr = 0;
    while ( n%2 == 0)
        n /= 2 , ++nr;
    if(nr != 0 )
    {
        v [ ++ v [ 0 ] ] = 2;
        put [ ++put [ 0 ] ] = nr;
    }
    d = 3 ;
    while ( d<=(int) sqrt ( n ) && n!=1 )
    {
        nr = 0;
        while ( n%d == 0)
            n /= d , ++nr;
        if( nr != 0 )
        {
            v [ ++ v [ 0 ] ] = d ;
            put [ ++ put [ 0 ] ] = nr ;
        }
        d += 2;
    }
    if( n!= 1 )
    {
        v [ ++ v [ 0 ] ] = n ;
        put [ ++ put [ 0 ] ] = 1 ;
    }
}
int main ( )
{
    long long nrdiv , prod , prod2 , s ;
    freopen ( "ssnd.in" , "r" , stdin ) ;
    freopen ( "ssnd.out" , "w" , stdout ) ;
    scanf ( "%lld" , &t ) ;
    for ( int i=1 ; i<=t ; ++i )
    {
        scanf( "%lld" , &n );
        v [ 0 ] = put [ 0 ] = 0 ;
        desc ( n ) ;
        nrdiv = 1;
        prod2 = 1;
        for( int i=1 ; i<=v [ 0 ] ; ++i )
        {
            prod = 1 ;
            nrdiv = nrdiv * (put [ i ] + 1);
            s = 0 ;
            for ( int j=0 ; j<= put [ i ] ; ++j )
            {
                s = (s + prod) % MOD ;
                prod *= v [ i ] ;
            }
            prod2 = (prod2 * s) % MOD ;
        }
        printf("%lld %lld\n" ,  nrdiv , prod2);
    }
    return 0 ;
}