Cod sursa(job #2636860)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 20 iulie 2020 14:35:11
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#define LMAX 1000005
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int t;
long long n, nr_div, sum;
const int MOD = 9973;
bool v[LMAX];
vector <int> prime;

long long putere(long long a, long long b) {
    long long rez = a;
    while (--b)
        rez *= a;
    return rez;
}

void descompune(){
    nr_div = 1, sum = 1;
    long long p = 0, div = 0;
    for (long long i = 0; n > 1 && i * i <= n; ++i) {
        p = 0, div = prime[i];
        while (n % div == 0) {
            n /= div;
            ++p;
        }
        if (p > 0) {
            nr_div = nr_div * (p + 1) % MOD;
            sum = sum * ((putere(div, p + 1) - 1) / (div - 1)) % MOD;
        }
        if (n <= 1)
            break;
    }
    if (n > 1) {
        p = 1, div = n;
        nr_div = nr_div * (p + 1) % MOD;
        sum = sum * ((putere(div, p + 1) - 1) / (div - 1)) % MOD;
    }
    fout << nr_div << " " << sum << "\n";
    return;
}

void ciur() {
    for (int i = 2; i <= LMAX - 2; i += 2) {
        if (!v[i]) {
            for (int j = i * 2; j <= LMAX - 2; j += i)
                v[j] = 1;
            prime.push_back(i);
        }
        if (i == 2)
            --i;
    }
    return;
}

int main() {
    ciur();
    fin >> t;
    while (t--) {
        fin >> n;
        descompune();
    }
    return 0;
}