Cod sursa(job #3227369)

Utilizator tudorororTudor-Mihail Danila tudororor Data 29 aprilie 2024 21:27:58
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

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

bool ciur[1000005];
void seteaza()
{
    ciur[0] = true; ciur[1] = true;
    for(long long i = 2; i*i <= 1000000; i++)
        if(ciur[i] == false)
            for(long long j = 2; j*i <= 1000000; j++)
                ciur[i*j] = true;
}

long long putere(long long x, long long y)
{
    long long p = 1;
    while(y)
    {
        if(y % 2)
            p *= x%9973;
        x *= x%9973;
        y /= 2;
    }
    return p;
}

void ssnd(long long n)
{
    long long nrdiv = 1, sumdiv = 1;
    if(ciur[n])
    {
        for(long long i = 2; i*i <= n; i++)
        if(!ciur[i] && n % i == 0)
            {
                long long p = 0, cn = n;
                while(cn % i == 0)
                {
                    p++;
                    cn /= i;
                }
                nrdiv *= (p + 1);
                sumdiv *= ((putere(i, p + 1)%9973 - 1)/(i - 1))%9973;
            }
    }
    else
    {
        nrdiv = 2;
        sumdiv = (1 + n)%9973;
    }
    g << nrdiv << ' ' << sumdiv << '\n';
}

int main()
{
    long long t;
    f >> t;
    seteaza();
    while(t)
    {
        long long n;
        f >> n;
        ssnd(n);
        t--;
    }
    return 0;
}