Cod sursa(job #3168324)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 11 noiembrie 2023 23:19:15
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <vector>

using namespace std;

const int MOD = 9973;
const long long NMAX = 1000000000000;
const long long SQRT_NMAX = 1e6;

bool notprime[SQRT_NMAX + 1];
vector<int> primes;

int main()
{
    FILE *fin, *fout;
    fin = fopen("ssnd.in", "r");
    fout = fopen("ssnd.out", "w");

    long long t, n, i, j;

    for (i = 2; i * i <= NMAX; i++)
        if (!notprime[i]) {
            primes.push_back(i);
            for (j = i * i; j <= SQRT_NMAX; j += i)
                notprime[j] = true;
        }

    fscanf(fin, "%lld", &t);
    while(t--) {
        fscanf(fin, "%lld", &n);

        long long nr_div = 1;
        long long sum_div = 1;

        for (i = 0; i < (int)primes.size() && primes[i] * primes[i] <= n; i++) {
            long long sum_pow = 1, base = 1, power = 0;
            while (n % primes[i] == 0) {
                base *= primes[i];
                power++;
                sum_pow = sum_pow + base;
                n /= primes[i];
            }

            sum_div = (sum_div * sum_pow) % MOD;
            nr_div = nr_div * (power + 1);
        }

        if (n > 1) {
            nr_div = nr_div * 2;
            sum_div = (sum_div * (1 + n)) % MOD;
        }

        fprintf(fout, "%lld %lld\n", nr_div, sum_div);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}