Cod sursa(job #2172719)

Utilizator zanugMatyas Gergely zanug Data 15 martie 2018 17:38:33
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 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 int PLIM = 1e6+2;
const int MOD = 9973;

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

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

    fin >> t;

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

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