Cod sursa(job #3178757)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 2 decembrie 2023 13:34:13
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#define mod 9973
#define sz 1000000
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");

long long t,n;

bool c[sz + 5];
vector <long long> d;


long long power(long long base,long long exp)
{
    long long prod = 1;
    while(exp)
    {
        if(exp&1)
            prod=(prod*base)%mod;
        exp/=2;
        base=(base*base)%mod;
    }
    return prod;
}
long long inv(long long nr)
{
    return power(nr,mod-2);
}
void prim()
{
    c[0]=1;
    c[1]=1;
    for(int i=2; i<=sz; i++)
        if(!c[i])
        {
            d.push_back(i);
            for(int j = 2*i; j<=sz; j+=i)
                c[j]=1;
        }
}
long long sd;
long long nrd;

void dv(long long x)
{
    sd=1;
    nrd=1;
    int e=0;
    for(int dz = 0;d[dz]*d[dz]<=x;dz++)
        if(x%d[dz]==0)
    {
        e=1;
        while(x%d[dz]==0)
            e++,x/=d[dz];
        nrd*=e;
        sd=(sd * (power(d[dz],e)-1)%mod*inv(d[dz]-1)%mod)%mod;
    }
    if(x>1)
    {
        e=2;
        nrd*=e;
        sd=(sd*(x*x-1)%mod*inv(x-1))%mod;
    }
}

int main()
{
    prim();
    fin>>t;
    for(int i=1;i<=t;i++)
    {
        fin>>n;
        dv(n);
        fout<<nrd<<' '<<sd<<'\n';
    }
}