Cod sursa(job #3300650)

Utilizator prodsevenStefan Albu prodseven Data 18 iunie 2025 13:18:25
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <bitset>
#include <vector>
#include <cmath>

using namespace std;

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

const int CIURMAX = 1000000;

bitset<CIURMAX + 1> prim;
vector<int> prime;

void ciur() {
    prim.set();
    prim[0] = prim[1] = 0;
    prime.push_back(2);
    for (int i = 4 ; i <= CIURMAX ; i += 2) {
        prim[i] = 0;
    }
    for (int i = 3 ; i * i <= CIURMAX ; i += 2) {
        if (prim[i]) {
            prime.push_back(i);
            for (int j = i * i ; j <= CIURMAX ; j += i) {
                prim[j] = 0;
            }
        }
    }
}

int main() {
    ciur();
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        int d = 0, p = 0, nr_div = 1, suma_div = 1;
        while (d < prime.size() && prime[d] * prime[d] <= n) {
            while (n % prime[d] == 0) {
                n /= prime[d];
                p++;
            }
            if (p) {
                nr_div *= (p + 1);
                suma_div *= (pow(prime[d], p + 1) - 1) / (prime[d] - 1);
            }
            d++;
        }
        if (n > 1) {
            nr_div *= 2;
            suma_div *= (pow(n, 2) - 1) / (n - 1);
        }
        cout << nr_div << " " << suma_div << "\n";
    }
    return 0;
}