Cod sursa(job #3293205)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 10 aprilie 2025 19:13:16
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <bits/stdc++.h>
#define VMAX 1000005
#define INF 100000000
#define int long long int
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

const int mod = 9973;
//int numere[VMAX];
vector<int> prime;
vector<pair<int,int>> divi;
bool ciur[VMAX];
int rasp;

int bkt(int indic, int rez)
{
    if(indic==divi.size())
        return rez%mod;
    else
    {
        int nr=0,pow_;
        for(int i=0,pow_=1;i<=divi[indic].second;i++,pow_=(pow_*divi[indic].first)%mod)
        {
            nr=(nr+bkt(indic+1,(rez*pow_)%mod))%mod;
        }
        return nr;
    }
}

signed main()
{
    int n,m,i,j,k,t,q,nr,p,suma,maxim,aparitii,candidat,st,dr,mij,i_max,j_max;
    for(i=2;i<VMAX;i++)
    {
        if(ciur[i]==0)
        {
            prime.push_back(i);
            for(j=2;j*i<VMAX;j++)
                ciur[i*j]=1;
        }
    }
    prime.push_back(INF);


    fin>>t;
    while(t--)
    {
        fin>>n;
        for(i=0;prime[i]*prime[i]<=n;i++)
        {
            if(n%prime[i]==0)
            {
                divi.push_back({prime[i],0});
                do{
                    n/=prime[i];
                    divi.back().second++;
                }
                while(n%prime[i]==0);
            }
        }
        if(n!=1)
            divi.push_back({n,1});
        nr=1;
        for(i=0;i<divi.size();i++)
            nr=nr*(divi[i].second+1);
        fout<<nr<<' ';
        fout<<bkt(0,1)<<'\n';
        divi.clear();
    }




    return 0;
}