Cod sursa(job #980613)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 5 august 2013 10:58:50
Problema Suma si numarul divizorilor Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

#define ULL unsigned long long

using namespace std;

bool pm[1000010];
int prim[1000010], k;

void ciur ()
{
    for (int i = 2; i <= 1000000; i++)
    {
        if (!pm[i])
        {
            prim[++k] = i;
            for (ULL j = i * i; j <= 1000000; j += i)
                pm[j] = true;
        }
    }
}

int main ()
{
    ifstream f ("ssnd.in");
    ofstream g ("ssnd.out");

    int t;
    f >> t;

    ciur ();

    ULL n;
    for (int i = 1; i <= t; i++)
    {
        f >> n;

        ULL sdiv = 1, ndiv = 1;
        for (int j = 1; j <= k && prim[j] * prim[j] <= n; j++)
            if (!(n % prim[j]))
            {
                ULL p = prim[j], e = 1;

                while (!(n % prim[j]))
                {
                    p *= prim[j];
                    e++;
                    n /= prim[j];
                }

                sdiv *= ((p - 1) / (prim[j] - 1)) % 9973;
                ndiv *= e;
            }

        if (n > 1)
        {
            sdiv = (sdiv * (n + 1)) % 9973;
            ndiv *= 2;
        }

        g << ndiv << " " << sdiv << '\n';
    }

    return 0;
}