Cod sursa(job #2772307)

Utilizator Maftei_TudorMaftei Tudor Maftei_Tudor Data 31 august 2021 17:58:32
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>

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

#define MOD 9973

bool ciur[1000001];
long long n, x, prime[1000001], k, nr=1, sum=1, pw;

long long putere(long long baza, long long exp)
{
    if(exp==0)
        return 1;
    long long x=putere(baza, exp/2);
    if(exp%2==0)
        return x*x%MOD;
    else return x*x%MOD*baza%MOD;
}

int main()
{
    for(long long i=2; i<=1000000; i++)
    {
        if(ciur[i]==0)
        {
            k++;
            prime[k]=i;
            for(long long j=2; i*j<=1000000; j++)
                ciur[i*j]=1;
        }
    }
    fin>>n;
    for(long long i=1; i<=n; i++)
    {
        fin>>x;
        nr=1;
        sum=1;
        for(long long div=1; prime[div]*prime[div]<=x; div++)
        {
            if(x%prime[div]==0)
            {
                long long pw=0;
                while(x%prime[div]==0)
                {
                    pw++;
                    x/=prime[div];
                }
                nr=nr*(pw+1)%MOD;
                long long a=putere(prime[div], pw+1)-1;
                if(a<0) a+=MOD;
                long long b=prime[div]-1;
                sum=sum*(a*putere(b, MOD-2)%MOD)%MOD;
            }
        }
        if(x>1) {nr=nr*2%MOD; long long a=putere(x, 2)-1; if(a<0) a+=MOD; long long b=x-1; sum=sum*(a*putere(b, MOD-2)%MOD)%MOD;}
        fout<<nr<<' '<<sum<<'\n';
    }
    return 0;
}