Cod sursa(job #3321324)

Utilizator vladsoartavlad sofronea vladsoarta Data 9 noiembrie 2025 11:32:15
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <fstream>
#include <vector>
#include <cstdint>
#define int long long

using namespace std;

ifstream cin("ssnd.in");
ofstream cout("ssnd.out");

bool ciur[1000001];
vector<int>prime;

const int MOD = 9973;

void gen_fact()
{
    ciur[1] = 1;
    for(int i=2;i<=1000000;i++)
    {
        if(ciur[i] == 0)
        {for(int j=i*2;j<=1000000;j+=i)
            ciur[j] = 1;
        prime.push_back(i);
        }
    }
}

int fast_pow(int b,int p)
{
    if(p==0)
        return 1;
    else if(p%2==0)
    {
        int rez=fast_pow(b,p/2)%MOD;
        return (rez*rez)%MOD;
    }
    return (b*fast_pow(b,p-1))%MOD;
}

int32_t main()
{
    int t;
    cin>>t;
    gen_fact();
    while(t--)
    {
        int n;
        cin>>n;
        int p = 0;
        int diviz = 1;
        int sum = 1;
        for(int h=0;h<prime.size() && prime[h] <= n;h++)
        {
            while(n % prime[h] == 0)
            {
                p++;
                n/=prime[h];
            }
            if(p!=0)
                {diviz*=(p+1);
                int inv = ((fast_pow(prime[h],p+1) - 1 + MOD)%MOD * fast_pow(prime[h]-1,MOD-2))%MOD;
                sum = sum * inv % MOD;
                }
            p=0;
        }
        if(n!=1)
        {
            diviz*=2;
            int inv = ((fast_pow(n,2) - 1 + MOD)%MOD * fast_pow(n,MOD-2))%MOD;
            sum = sum * inv % MOD;
        }

        cout<<diviz<<" "<<sum<<'\n';
    }
    return 0;
}