Cod sursa(job #3349082)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 25 martie 2026 13:22:47
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>

using namespace std;

#define USE_STD_IO 0
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
#endif // USE_STD_IO

const int MAX = 1000006;
const int MOD = 9973;
long long n, i, j, a, nrp, prim[MAX + 2];
bool comp[MAX + 2];

int main() {
    if(USE_STD_IO) ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    prim[nrp = 1] = 2;
    for(i = 3; i * i <= MAX; i += 2) {
        if(!comp[i]) {
            prim[++nrp] = i;
            for(j = i * i; j <= MAX; j += 2 * i) {
                comp[j] = true;
            }
        }
    }
    while(i <= MAX) {
        if(!comp[i]) prim[++nrp] = i;
        i += 2;
    }

    fin >> n;
    while(n--) {
        fin >> a;

        int d = 1, e, put;
        long long nrd = 1, sumd = 1;
        while(d <= nrp && prim[d] * prim[d] <= a) {
            if(0 == a % prim[d]) {
                put = prim[d];
                e = 0;
                while(0 == a % prim[d]) {
                    e++;
                    put *= prim[d];
                    a /= prim[d];
                }
                nrd *= e + 1;
                sumd *= (put - 1) / (prim[d] - 1);
		sumd %= MOD;
            }
            d++;
        }
        if(1 < a) {
            nrd *= 2;
            sumd *= (a * a - 1) / (a - 1);
	    sumd %= MOD;
        }
        fout << nrd << ' ' << sumd << '\n';
    }


    return 0;
}