Cod sursa(job #2274802)

Utilizator q1e123Solca Robert-Nicolae q1e123 Data 2 noiembrie 2018 15:24:26
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

#define MOD 9973
#define  MAX 1000001

std::ifstream INPUT_FILE("ssnd.in");
std::ofstream OUTPUT_FILE("ssnd.out");

int  t;
long long size,nrPrime[MAX];
bool viz[MAX];

void ciur(){
    for(long i=2;i<=MAX;++i){
        if(!viz[i]){
            nrPrime[++size]=i;
            for(long j=2;i*j<=MAX;++j) viz[i*j]=1;
        }
    }
}

void solve(long long x){
    long long sum,nrDiv;
    sum=nrDiv=1;
    for(int i=1;i<=size && nrPrime[i]*nrPrime[i]<=x;++i){
        long long d,demPowa;
        d=0;
        demPowa=nrPrime[i];
        while(x%nrPrime[i]==0){
            x/=nrPrime[i];
            ++d;
            demPowa*=nrPrime[i];
        }
        if(d>0){
            sum=(sum*(demPowa-1)/(nrPrime[i]-1))%MOD ;
            nrDiv*=(d+1);
        }
    }

    if (x>1){
        nrDiv*=2;
        sum=(sum*(x*x-1)/(x-1))%MOD;
    }
    OUTPUT_FILE<<nrDiv<<" "<<sum<<"\n";
}

int main() {
    std::ios::sync_with_stdio(false);
    INPUT_FILE.tie(0);
    OUTPUT_FILE.tie(0);

    ciur();
    INPUT_FILE>>t;
    for(int i=0;i<t;++i){
        long long x;
        INPUT_FILE>>x;
        solve(x);
    }
    return 0;
}