Cod sursa(job #3286297)

Utilizator tudorhTudor Horobeanu tudorh Data 13 martie 2025 22:34:54
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
vector<int>prime;
bitset<1000001> ciur;
int mod=9973;
void eratostene()
{
    for(int i=2;i<=1e6;i++)
    {
        if(!ciur[i])
        {
            prime.push_back(i);
            for(int j=i;1ll*i*j<=1e6;j++)
                ciur[i*j]=1;
        }
    }
}
long long power(long long base,int power)
{
    long long res=1;
    while(power)
    {
        if(power%2)
        {
            res*=base;
            res%=mod;
        }
        base*=base;
        base%=mod;
        power/=2;
    }
    return res;
}
long long inv(long long n)
{
    return power(n,mod-2);
}
void solve()
{
    long long n;
    long long nr=1,suma=1;
    fin>>n;
    int pos=0;
    while(pos<prime.size() && prime[pos]*prime[pos]<=n)
    {
        int exp=0;
        while(n%prime[pos]==0)
        {
            n/=prime[pos];
            exp++;
        }
        nr*=(exp+1);
        if(exp!=0)
        {
            suma*=(power(prime[pos],exp+1)-1+mod)%mod*inv(prime[pos]-1)%mod;
            suma%=mod;
        }
        pos++;
    }
    if(n!=1)
    {
        nr*=2;
        suma*=(n+1);
        suma%=mod;
    }
    fout<<nr<<' '<<suma<<'\n';
}
int main()
{
    eratostene();
    int tc;
    fin>>tc;
    while(tc--)
        solve();
    return 0;
}