Cod sursa(job #3285049)

Utilizator PDarius02Paunescu Darius PDarius02 Data 12 martie 2025 14:40:58
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <bitset>

using namespace std;
ifstream fcin("ssnd.in");
ofstream fout("ssnd.out");

long long n, x, k, nr, ct;
long long P[1000005];
bitset <1000005>v;

int putere(int nr, int p)
{
    int rez=1;
    nr=nr%9973;
    for(; p; p>>=1)
    {
        if (p & 1)
        {
            rez=rez*nr;
            rez=rez%9973;
        }
        nr=nr*nr;
        nr=nr%9973;
    }
    return rez;
}

int main()
{
    v.set(0);
    v.set(1);
    for(int i=2; i<1000005; i++)
    {
        if (v.test(i)==0)
        {
            P[++k]=i;
            for(int j=i+i; j<1000005; j+=i)
                v.set(j);
        }
    }


    fcin>>n;
    for (int i=1; i<=n; i++)
    {
        fcin>>x;
        nr=1;
        ct=1;

        for (int j=1; j<=k && 1LL*P[j]*P[j]<=x; ++j)
        {
            if (x%P[j]) continue;
            int crt=0;

            while (x%P[j]==0)
            {
                crt++;
                x=x/P[j];
            }

            nr*=(crt+1);

            int numr=(putere(P[j], crt+1)-1) % 9973;
            int numi=putere(P[j]-1, 9971) % 9973;

            ct=(((ct*numr)%9973)*numi)%9973;
        }

        if (x>1)
        {
            nr=nr*2;
            ct=(1LL*ct*(x+1)%9973);
        }

        fout<<nr<<" "<<ct<<"\n";
    }
}