Cod sursa(job #1736650)

Utilizator TiiberiuBujor Tiberiu-Cosmin Tiiberiu Data 2 august 2016 13:18:12
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb

#include <fstream>
#include <bitset>

using namespace std;
#define mod 9973
const int MAX = 1000005;
int  k, P[MAX];
bitset <MAX> viz;
long long n,sum,term, prim,sum_div,nr_div; 
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;
        sum_div = nr_div = 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];
                }
                sum_div = (sum * sum_div) % mod;
                nr_div *= cnt;
 
            }
        }
        if(n > 1)
        {
            sum_div = (sum_div * (n + 1)) % mod;
            nr_div *= 2;
        }
        fout<<nr_div<<" "<<sum_div<<'\n';
    }
 
    return 0;
}