Cod sursa(job #1465904)

Utilizator cristina_borzaCristina Borza cristina_borza Data 28 iulie 2015 11:24:08
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

#define NMAX 1000005
#define MOD 9973

using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

long long t,i,n,p[NMAX],nr,aux,sol1,sol2,k;
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[++k] = i ;
        }
    }
}
int main()
{
    f >> t;

    ciur();

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