Cod sursa(job #2020889)

Utilizator shantih1Alex S Hill shantih1 Data 11 septembrie 2017 22:26:57
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long n, i, j, t, nr, pr, d, s, in, x, prm[100110];
bool ciur[100110];

long long alab (long long a, long long b)
{
    long long rez = 1;
    while (b != 0)
    {
        if (b % 2 == 0)
        {   a = (a*a) % 9973;  b /= 2;   }
        
        if (b % 2 == 1)
        {   rez = (rez*a) % 9973;    b--;    }
    }
    return rez;
}

int main () {
    
    for (i = 2; i <= 100100; i++)
        if (ciur[i] == 0)
        {
            pr++;   prm[pr] = i;
            for (j = 2; i * j <= 100100; j++)   ciur[i * j] = 1;
        }
    
    fin >> t;
    for (i = 1; i <= t; i++)
    {
        fin >> n;
        x = n;
        in = 1;
        d = 1;
        s = 1;
        
        while (n != 1 && prm[in] < sqrt(x) && in <= pr)
        {
            while (n % prm[in] == 0)
            {
                n /= prm[in];
                nr++;
            }
            if (nr != 0)
            {
                d *= nr+1;
                j = alab (prm[in], nr+1);
                s = s * ((j-1) / (prm[in]-1));
                s %= 9973;
                d %= 9973;
                nr = 0;
            }
            in++;
        }
        
        if (n != 1)
        {
            s += n + 1;
        }
        
        fout << d << " " << s << "\n";
    }
}