Cod sursa(job #2837852)

Utilizator loraclorac lorac lorac Data 22 ianuarie 2022 18:38:04
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
typedef long long ll;
const ll lim=1e6+4;
const ll mod=9973;
vector<ll> primes;
bool ok[lim];
ll tst,n;
ll put(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1) ans=(ans*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return ans;
}
int main()
{
    for(ll i=2;i<lim;++i)
    if(!ok[i])
    {
        primes.push_back(i);
        for(ll j=2*i;j<lim;j+=i)
            ok[j]=true;
    }
    in>>tst;
    while(tst--)
    {
        in>>n;
        ll number=1,sum=1;
        for(ll i=0;i<primes.size() and primes[i]*primes[i]<=n;++i)
        if(n%primes[i]==0)
        {
            ll power=1,expo=0;
            while(n%primes[i]==0)
                power*=primes[i],
                n/=primes[i],
                ++expo;
            power*=primes[i];
            power=(power-1)%mod;
            number*=(expo+1);
            sum=(((sum*power)%mod)*put(primes[i]-1,mod-2))%mod;
        }
        if(n>1) number*=2,
            sum=(sum*(n+1))%mod;
        out<<number<<' '<<sum<<'\n';
    }
    return 0;
}