Cod sursa(job #1861267)

Utilizator Andrei_Gamerul9112Madarasan Andrei Andrei_Gamerul9112 Data 28 ianuarie 2017 18:58:33
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#define LL long long
#define MOD 9973
using namespace std;
int t,nr;
LL n,nrdiv;

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

const int MAXSIZE = 1000001;
int r [80000];
char w [MAXSIZE]; //w[i] == 0 if i is prime
inline void ciur()
{   int i, j;
    for (i = 2; i <= 1000000; ++i)
        if (w[i] == 0)
        {   r[++nr]=i;
            for (j = i + i; j <= 1000000; j += i) w[j] = 1;
        }
    }
inline LL calc(LL a, int k)
{   LL p=a;
    while(--k) p*=a;
    return p;
}
inline void desc( LL n )
{   int i = 1,d;
    LL nrdiv=1,prod,sum=1;
    while(r[i]*r[i]<=n)
    {   if(!(n%r[i]))
        {
            d = 0; prod=1;
            while(!(n%r[i]))
            {   d++;
                n/=r[i];
            }
            d++;
            //prod = calc(r[i],d)-1;
            prod = ((calc(r[i],d)-1) / (r[i]-1)) % MOD;
            sum = (sum * prod) % MOD;
            nrdiv = nrdiv * d;
        }
        ++i;
    }
    if(n>1)
        {   nrdiv = nrdiv * 2;
            sum = (sum * (n+1)) % MOD;
        }
    g<<nrdiv<<' '<<sum<<'\n';
}

int main()
{
    ciur();
    f >> t;
    while(t--)
    {
        f >> n;
        desc( n );
    }
    g.close(); return 0;
}