Cod sursa(job #2714861)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 2 martie 2021 16:47:27
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int MOD = 9937;
const int SQRT = 1e6;

bool d[SQRT + 1];
vector <int> primes;

void Sieve() {
    for(int i = 3; i * i <= SQRT; i += 2) {
        if(!d[i]) {
            for(int j = i * i; j <= SQRT; j += 2 * i) {
                d[j] = true;
            }
        }
    }

    primes.push_back(2);
    for(int i = 3; i <= SQRT; i += 2) {
        if(!d[i]) {
            primes.push_back(i);
        }
    }
}

int main() {
    Sieve();

    int T;
    cin >> T;
    while(T--) {
        long long x;
        cin >> x;

        int nrd = 1, sd = 1;

        for(auto it : primes) {
            if(1LL * it * it > x) {
                break;
            } else if(x % it == 0) {
                int exp = 0;
                long long prod = 1LL;
                while(x % it == 0) {
                    exp++;
                    prod *= it;
                    x /= it;
                }

                nrd *= (exp + 1);
                sd = (sd * (prod * it - 1) / (it - 1)) % MOD;
            }
        }

        if(x > 1) {
            nrd *= 2;
            sd = (sd * (x + 1)) % MOD;
        }

        cout << nrd << ' ' << sd << '\n';
    }

    return 0;
}