Cod sursa(job #3356787)

Utilizator MrPetcuPetcu Robert MrPetcu Data 4 iunie 2026 09:27:52
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <vector>
#include <fstream>

using namespace std;

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

const int MOD = 9973;
const int MAX_VAL = 1000000;

int num_numere;
long long numar;

bool ciur[MAX_VAL + 5];
vector<int> numere_prime;

void genereaza_ciur() {
    for (int i = 2; i <= MAX_VAL; i++) {
        if (!ciur[i]) {
            numere_prime.push_back(i);
            for (int j = 2 * i; j <= MAX_VAL; j += i) {
                ciur[j] = true;
            }
        }
    }
}

int main() {
    genereaza_ciur();

    if (fin >> num_numere) {
        for (int i = 1; i <= num_numere; i++) {
            fin >> numar;

            long long num_divizori = 1;
            long long suma_divizori = 1;

            for (int p : numere_prime) {
                if (1LL * p * p > numar) {
                    break;
                }

                if (numar % p == 0) {
                    int cat = 0;
                    long long suma_p = 1;
                    long long p_pow = 1;

                    while (numar % p == 0) {
                        cat++;
                        numar /= p;
                        p_pow = (p_pow * p) % MOD;
                        suma_p = (suma_p + p_pow) % MOD;
                    }

                    num_divizori = num_divizori * (cat + 1);
                    suma_divizori = (suma_divizori * suma_p) % MOD;
                }
            }

            if (numar > 1) {
                num_divizori = num_divizori * 2;
                suma_divizori = (suma_divizori * (1 + numar % MOD)) % MOD;
            }

            fout << num_divizori << " " << suma_divizori << "\n";
        }
    }
    return 0;
}