Cod sursa(job #2129405)

Utilizator ElizaTElla Rose ElizaT Data 12 februarie 2018 20:03:42
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

unsigned long long int pow1 (int a,int b)
{
    unsigned long long int s = 1;
    for (int i = 0;i < b;i++)
        s *= a;
    return s;
}

int main()
{
    ifstream fin("ssnd.in");
    ofstream fout("ssnd.out");
    int n,a,cnt,div;
    unsigned long long int nr,s;
    fin >> n;
    for (int i = 0;i < n;i++)
    {
        fin >> a;
        cnt = 0;
        nr = 1;
        s = 1;
        div = 3;
        while (a % 2 == 0)
        {
            cnt++;
            a /= 2;
        }
        if (cnt > 0)
        {
            nr = cnt + 1;
            s = pow1(2,cnt + 1);
            s--;
        }
        s %= 9973;
        while (div * div <= a && a > 1)
        {
            cnt = 0;
            while (a % div == 0)
            {
                cnt++;
                a /= div;
            }
            if (cnt > 0)
            {
                nr *= cnt + 1;
                s *= (pow1(div,cnt + 1) - 1);
                s /= (div - 1);
                s %= 9973;
            }
            div += 2;
        }
        if (a != 1)
        {
            nr *= 2;
            s *= (a * a - 1);
            s /= (a - 1);
            s %= 9973;
        }
        fout << nr << " " << s << '\n';
    }
    return 0;
}