Cod sursa(job #2745606)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 26 aprilie 2021 20:32:19
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
unordered_map<int,int> d;
void div(ll n){
    while(n%2==0){
        d[2]++;
        n=n>>1;
    }
    for(int i=3;i*i<=n;i+=2){
        while(n%i==0){
            d[i]++;
            n/=i;
        }
    }
    if(n>2){
        d[n]++;
    }
}

ll pwr(ll n,ll p){
    ll rez=1;
    while(p){
        if(p&1)rez*=n;
        n*=n;
        p=p>>1;
    }
    return rez;
}

int main(){
    int t;
    in>>t;
    for(int i=0;i<t;i++){
        ll nr;
        in>>nr;
        d.clear();
        div(nr);
        ll nr_div=1,suma=1;
        for(auto j:d){
            nr_div*=(j.second+1);
            suma*=(pwr(j.first,j.second+1)-1)/(j.first-1);
            suma%=9973;
        }
        out<<nr_div<<" "<<suma<<"\n";
    }
}