Cod sursa(job #799562)

Utilizator icb_mnStf Cic icb_mn Data 19 octombrie 2012 13:07:07
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
#define LL long long
#define M 9973
#define NMAX 1000000
using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");
LL n, d[50], p[50], nr, sum;
int t, semn[NMAX + 8], ciur[NMAX + 8],lng = 0;

inline void eratosthenes()
{
    ciur[0] = 2;
    lng = 1;
    for(int i = 3; i <= NMAX; i += 2)
    {
        if(!semn[i])
        {
            ciur[lng] = i;
            lng++;
            for(int j = i + i; j + i <= NMAX; j += i)semn[j] = 1;
        }
    }
}

inline void descompune()
{
    int putere = 1;
    LL numar;
    int i = 0;
    int d = 0;
    while(ciur[i] * ciur[i] <= n)
    {
        if(!(n % ciur[i]))
        {
            d = 0;
            LL s = 1;
            putere  =1;
            while(!(n % ciur[i]))
            {
                d++;
                n /= ciur[i];
                putere = putere * ciur[i];
                s += putere;
            }
            sum = (sum * s) % M;
            nr = nr * (1+ d);
        }
        i++;
    }
    if(n > 1)nr = (2 * nr) % M, sum = (sum * (n + 1)) % M;

    g<<nr<<' '<<sum <<'\n';
}
int main()
{

    f>>t;
    eratosthenes();

    while(t--)
    {
        f>>n;

        nr = 1;
        sum = 1;

        descompune();
    }

    g.close();

    return 0;
}