Cod sursa(job #1973464)

Utilizator valentinoMoldovan Rares valentino Data 25 aprilie 2017 01:10:19
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#define mod 9973
using namespace std;

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

int n, t;

inline int pow(int x, int p)
{
    int ans = 1;
    x %= mod;
    while(p)
    {
        if(p % 2) ans = (ans * x) % mod;
        x = (x * x) % mod;
        p >>= 1;
    }
    return ans;
}

int main()
{
    long long nrd, sum;
    f >> t;
    for(int i = 1; i <= t; ++i)
    {
        nrd = 1; sum = 1;
        f >> n;
        for(int d = 2; d * d <= n && n > 1; ++d)
        {
            if(n % d) continue;

            int p = 0, psum = 1;
            while(n % d == 0)
            {
                p++;
                n /= d;
            }

            nrd *= (p + 1);
            sum *= ( (pow(d, p + 1) - 1) / (d - 1) );
            sum %= mod;
        }
        if(n != 1)
        {
            nrd *= 2;
            sum = sum * (n + 1) % mod;
        }
        g << nrd << ' ' << sum << '\n';
    }
}