Cod sursa(job #2061063)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 8 noiembrie 2017 21:46:17
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define MOD 9973

using namespace std;

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

int T,i,j,n,v[1000001],nrdiv,k,rest;
bool w[1000001];

int main()
{
    fin >> T;
    for (i=2; i<=1000000; i++)
        if (w[i] == 0)
        {
            v[++k] = i;
            for (j=i+i; j<=1000000; j+=i)
                w[j] = 1;
        }
    for (;T--;)
    {
        fin >> n;
        nrdiv = 1;
        rest = 1;
        for (i=1; i<=k && v[i]*v[i]<=n; i++)
        {
            if (n%v[i] == 1)
                continue;
            int aux = 1;
            int nr = v[i];
            while (n%v[i] == 0)
            {
                n /= v[i];
                nr *= v[i];
                aux++;
            }
            nrdiv *= aux;
            rest = (rest*(nr-1)/(v[i]-1))%MOD;
        }
        if (n > 1)
        {
            nrdiv *= 2;
            rest *= n+1;
            rest %= MOD;
        }
        fout << nrdiv << " " << rest << "\n";
    }
    return 0;
}