Cod sursa(job #2371808)

Utilizator Vlad3108Tir Vlad Ioan Vlad3108 Data 6 martie 2019 19:42:56
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
#define LMAX 1000000
bitset<LMAX+5> ciur;
int pr[LMAX+5];
void Gen_Prime(){
    ciur[0]=ciur[1]=1;
    for(int d=2;d*d<=LMAX;++d)
        if(!ciur[d])
            for(int i=d*d;i<=LMAX;i+=d)
                ciur[i]=1;
    for(int i=1;i<=LMAX;++i)
        if(!ciur[i])
            pr[++pr[0]]=i;
}
#define MOD 9973
void Descomp(long long x){
    int ind=1;
    long long nr=1,S=1;
    while(1LL*pr[ind]*pr[ind]<=x){
        int ex=0;
        while(x%pr[ind]==0){
            x/=pr[ind];
            ++ex;
        }
        if(ex>0){
            nr=nr*(ex+1)%MOD;
            long long S_aux=0,P=1;
            for(int i=0;i<=ex;++i){
                S_aux=(S_aux+P)%MOD;
                P=P*pr[ind]%MOD;
            }
            S=S*S_aux%MOD;
        }
        ++ind;
    }
    if(x>1){
        nr=nr*2%MOD;
        S=S*(1+x)%MOD;
    }
    printf("%lld %lld\n",nr,S);
}
int main(){
  //  freopen("ssnd.in","r",stdin);
  //  freopen("ssnd.out","w",stdout);
    Gen_Prime();
    int t;
    scanf("%d",&t);
    while(t--){
        long long n;
        scanf("%lld",&n);
        Descomp(n);
    }
    return 0;
}