Cod sursa(job #2765369)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 26 iulie 2021 17:08:27
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>

using namespace std;

ifstream cin ( "ssnd.in" );
ofstream cout ( "ssnd.out" );

int nrprime[1000000];
bool ciur[1000000];

int main() {
    int i, poz, t, pozz_div, p;
    long long d, n, nrdiv, sum, divmax;
    poz = 0;
    for ( i = 2; i <= 1000; i++ ) {
        if ( ciur[i] == 0 ) {
            nrprime[poz++] = i;
            for ( d = i * i; d <= 1000000; d += i )
               ciur[d] = 1;
        }
    }
    for ( ; i <= 1000000; i++ ) {
      nrprime[poz] = ciur[i];
      poz += 1 - ciur[i];
    }
    cin >> t;
    for ( i = 1; i <= t; i++ ) {
        nrdiv = 1;
        sum = 1;
        cin >> n;
        pozz_div = 0;
        while ( pozz_div < poz && (long long)nrprime[pozz_div] * nrprime[pozz_div] <= n ) {
            d = nrprime[pozz_div];
            p = 0;
            divmax = 1;
            while ( n % d == 0 ) {
                divmax *= d;
                n /= d;
                p++;
            }
            nrdiv = ( nrdiv * ( ( p + 1 ) ) ) % 9973;
            sum = sum * ( ( ( divmax * d - 1 ) / ( d - 1 ) ) ) % 9973;
            pozz_div++;
        }
        if ( n > 1 ) {
            nrdiv = ( nrdiv * 2 ) % 9773;
            sum = sum * ( ( n + 1 ) ) % 9973;
        }
        if ( nrdiv == 1 ) {
            cout << nrdiv << " " << ( n + 1 ) % 9973;
        } else {
            cout << nrdiv << " " << sum;
        }
        cout << "\n";
    }
    return 0;
}