Cod sursa(job #2172517)

Utilizator zanugMatyas Gergely zanug Data 15 martie 2018 16:52:08
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

#define pb push_back
#define ll long long

using namespace std;

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

const ll PLIM = 1e6+2;
const ll MOD = 9973;

ll t, n;
ll k;
bool b[PLIM];
vector <ll> prim;

int main()
{
    for(ll i = 4; i < PLIM; i += 2)
    {
        b[i] = true;
    }
    prim.pb(2);

    for(ll i = 3; i < PLIM; i += 2)
    {
        if(!b[i])
        {
            prim.pb(i);
            for(ll j = i*2; j < PLIM; j += i)
            {
                b[j] = true;
            }
        }
    }

    fin >> t;

    for(ll i = 0; i < t; ++i)
    {
        fin >> n;
        k = 0;
        ll sum = 1;
        ll nr = 1;

        while(n > 1)
        {
            ll db = 1;
            ll pw = prim[k];
            while(n % prim[k] == 0)
            {
                n /= prim[k];
                ++db;
                pw *= prim[k];
            }
            nr *= db;
            sum = ((sum * (pw - 1)) / (prim[k] - 1)) % MOD;
            ++k;
        }

        fout << nr << " " << sum << "\n";
    }

    return 0;
}