Cod sursa(job #1736642)

Utilizator TiiberiuBujor Tiberiu-Cosmin Tiiberiu Data 2 august 2016 13:06:50
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <cstdlib>
#include <fstream>
#include <bitset>
#include <iostream>
using namespace std;
#define mod 9973
const int MAX = 1000005;
int  k, P[MAX];
bitset <MAX> viz;
long long n,sum,term, prim,sd,nd; 
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

void ciur() { 
    for(int i = 2; i < MAX; i++)
        if(viz[i] == 0) {
            P[++k] = i;
            for(int j = 2*i; j < MAX; j = j+i) viz[j] = 1;
        }
}
 int main() {
    int t,cnt=0,i; 
    ciur();
    fin>>t;
    for(; t; t--)
    {
        fin>>n;
        sd = nd = 1;
        for(i = 1; i <= k && P[i]*P[i] <= n; i++)
        {
            if(n % P[i] == 0)
            {
                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;
        }
        fout<<nd<<" "<<sd<<'\n';
    }
 
    return 0;
}