Cod sursa(job #1465908)

Utilizator cristina_borzaCristina Borza cristina_borza Data 28 iulie 2015 11:37:12
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 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,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()
{
    f >> t;

    ciur();

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