Cod sursa(job #1412091)

Utilizator 4ONI2015oni2015 4ONI2015 Data 1 aprilie 2015 09:23:50
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define mod 9973

using namespace std;
int t, cnt, np , i,  j ;
long long sd, term, prim,  sum, n, p[1000005], nd;
void ciur()
{
    np = 1;
    p[1] = 2;
    for(i = 3; i <= 1000; i += 2)
        if(!p[i])
        {
            p[++np] = i;
            for(j = i * i; j <= 1000000; j += 2 * i)
                p[j] = 1;
        }
    for(; i <= 1000000; i += 2)
        if(!p[i])
            p[++np] = i ;
}
int main()
{
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    ciur();
    scanf("%d", &t);
    for(; t; t--)
    {
        scanf("%lld", &n);
        sd = nd = 1;
        for(i = 1; i <= np && p[i]*p[i] <= n; i++)
        {
            sum = cnt = term = 1;
            prim = p[i] % mod;
            while(n % p[i] == 0)
            {
                cnt++;
                term = (term * prim) % mod;
                sum = (sum + term) % mod;
                n /= p[i];
            }
            sd = (sum * sd) % mod;
            nd *= cnt;
        }
        if(n > 1)
        {
            sd = (sd * (n + 1)) % mod;
            nd *= 2;
        }
        printf("%lld %lld\n", nd, sd);
    }
    return 0;
}