Cod sursa(job #1975609)

Utilizator papinub2Papa Valentin papinub2 Data 1 mai 2017 15:12:48
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>

using namespace std;

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

int k, t, nr, nr_div, prod = 1, s = 1;
int divizor;
unsigned long long n;
int OK[1000000], p[1000000];

int putere (int a, int b)
{
    int rez = 1;

    for (int i = 0; (1<<i) <= b; i++)
     {

         if ( ((1<<i) & b) > 0 )
            rez = (1LL * rez * a);

         a = (1LL * a * a);
     }

     return rez;
}

int main()
{
    for (int i = 2; i <= 1000000; i++)
    {
        if (OK[i] == 0)
        {
            for (unsigned long long j = i * i; j <= 1000000; j = j + i)
                OK[j] = 1;

            k++;
            p[k] = i;
        }
    }

    in >> t;

    k = 1;

    for (int i = 1; i <= t; i++)
    {

      in >> n;

    while (n != 1)
    {


        if (n % p[k] == 0)
        {
            nr++;
            divizor = p[k];

            while (n % p[k] == 0)
            {
                nr_div++;
                n = n / p[k];
            }

             prod = prod * (nr_div + 1);
             k++;

             s = (s * (putere(divizor, nr_div + 1) - 1) / (divizor - 1)) % 9973;
             nr_div = 0;
        }

        else

            k++;
    }

        out << prod << ' ' << s << '\n';
        nr = 0;
        k = 1;
        nr_div = 0;
        prod = 1;
        s = 1;

    }

    return 0;
}