Cod sursa(job #3038129)

Utilizator AndreiMLCChesauan Andrei AndreiMLC Data 26 martie 2023 21:25:28
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#define mod 9973

using namespace std;

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

int t;
long long n;

long long diviz(long long a)
{
    long long tot = 1;
    long long ind = 2;
    while (a > 1)
    {
        long long op = 0;
        while (a % ind == 0)
        {
            a /= ind;
            op++;
        }
        if (op > 0)
        {
            tot = tot * (op + 1);
        }
        ind++;
    }
    return tot;
}

long long expo(long long a, long long b)
{
    if (b == 0)
    {
        return 1;
    }
    else if (b % 2 == 1)
    {
        long long x = expo(a, b / 2) ;
        return a * x * x;
    }
    long long x = expo(a, b / 2);
    return x * x;
}

long long totsum(long long a)
{
    long long retur = 1;
    long long ind = 2;
    while (a > 1)
    {
        long long op = 0;
        while (a % ind == 0)
        {
            a /= ind;
            op++;
        }
        if (op > 0)
        {
            retur = (retur * ((expo(ind,op+1) - 1) / (ind-1))) % mod;
        }
        ind++;
    }
    return retur;
}
int main()
{
    f >> t;
    for (int i = 1; i <= t; i++)
    {
        f >> n;
        long long totdiv = diviz(n);
        g << totdiv << ' ';
        long long sum = totsum(n);
        g << sum << '\n';
    }
}