Cod sursa(job #1465917)

Utilizator cristina_borzaCristina Borza cristina_borza Data 28 iulie 2015 11:48:31
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <cstdio>

#define NMAX 1000005
#define MOD 9973

using namespace std;


long long n , aux , sol1 , sol2 ;
int p[NMAX] , t , nr , k , nrd ;
bool c[NMAX];

void ciur()
{
    c[1] = 1;
    for(int i = 2 ; i * i <= NMAX ; ++i){
        if(c[i] == 0){
            for(int j = i * i ; j <= NMAX ; j += i){
                c[j] = 1 ;
            }
        }
    }
    for(int i = 1 ; i <= NMAX ; ++i){
        if(c[i] == 0){
            p[++nrd] = i ;
        }
    }
}
int main()
{
    freopen("ssnd.in" , "r" , stdin) ;
    freopen("ssnd.out" , "w" , stdout) ;

    scanf("%d" , &t) ;

    ciur();

    for(int i = 1 ; i <= t ; ++i){
        scanf("%d" , &n) ;//f >> n ;
        k = 1 ;
        sol1 = 1 ;
        sol2 = 1 ;
        while(p[k] * p[k] <= n && k <= nrd){
            nr = 0 ;
            aux = 1 ;
            while(n % p[k] == 0){
                n /= p[k] ;
                ++nr ;
                aux *= p[k] ;
            }
            aux *= p[k] ;
            sol1 = (sol1 * (nr + 1)) % MOD ;
            sol2 = (sol2 * (aux - 1) / (p[k] - 1)) % MOD ;
            ++k ;
        }
        if(n != 1){
            sol1 *= 2 ;
            sol2 = (sol2 * (n +1 )) % MOD ;
        }
        printf("%lld %lld\n" , sol1 , sol2) ;//g << sol1 << " " << sol2 << '\n' ;
    }
    return 0;
}