Cod sursa(job #3301397)

Utilizator Grama2008Grama Andrei Teodor Grama2008 Data 25 iunie 2025 18:43:13
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

#define mod 9973

const int MAXN=1e6+5;

bitset<MAXN> ciur;
int primes[78499];

void getprimes(){
    ciur[0]=ciur[1]=true;
    for (int j=2*2;j<MAXN;j+=2){
        ciur[j]=true;
    }
    for (int i=3;i*i<MAXN;i+=2){
        if (ciur[i]==false){
            for (int j=i*i;j<MAXN;j+=i*2){
                ciur[j]=true;
            }
        }
    }
    int j=0;
    for (int i=0;i<MAXN;i++){
        if (ciur[i]==false){
            primes[j++]=i;
        }
    }
}

int main()
{
    getprimes();
    freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
    int t;
    cin>>t;
    while (t--){
        long long n;
        cin>>n;
        map<int, int> m;
        int i=0;
        while (1LL*primes[i]*primes[i]<=n){
            while (n%primes[i]==0){
                n/=primes[i];
                m[primes[i]]++;
            }
            i++;
        }
        if (n!=1){
            m[n]++;
        }
        int ans1=1,ans2=1;
        for (auto [div, cnt] : m){
            long long sum=0;
            int p=1;
            ans1=ans1*(cnt+1);
            for (int i=0;i<=cnt;i++){
                sum+=p;
                p*=div;
            }
            sum%=mod;
            ans2=1LL*ans2*sum%mod;
        }
        cout<<ans1<<' '<<ans2<<'\n';
    }
    return 0;
}