Cod sursa(job #2172674)

Utilizator zanugMatyas Gergely zanug Data 15 martie 2018 17:28:51
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 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, p;
bool b[PLIM];
ll prim[100000];

int main()
{
    for(ll i = 2; i < PLIM; ++i)
    {
        if(!b[i])
        {
            prim[p++] = i;
            for(ll j = i*2; j < PLIM; j += i)
            {
                b[j] = true;
            }
        }
    }

    fin >> t;

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

        while(prim[k] * prim[k] <= n)
        {
            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;
        }

        if(n > 1)
        {
            nr *= 2;
            sum = ((sum * (n*n - 1)) / (n - 1)) % MOD;
        }

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

    return 0;
}