Cod sursa(job #2409751)

Utilizator modulopaulModulopaul modulopaul Data 19 aprilie 2019 13:06:05
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#define MAXP 1000001
#define MP 78499
#define ll long long

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool prim[MAXP];
int vp[MP];
void C(){
    int npr=0;
    prim[0]=prim[1]=1;
    for(int i=2;i<=MAXP and npr<=MP-1;i++){
        if(prim[i]==0){
            npr++;
            vp[npr]=i;
            for(int d=2;d*i<=MAXP;d++){
                prim[i*d]=1;
            }
        }
    }
}
void solve(ll n){
    ll nrd=1,sd=1,auxn=n;
    for(int i=1;vp[i]*vp[i]<=auxn and i<=MP-1;i++){
        int e=0,pwvp=1;
        while(n%vp[i]==0){
            e++;
            n/=vp[i];auxn=n;
            pwvp*=vp[i];
        }
        pwvp*=vp[i];
        nrd*=e+1;
        sd*=(pwvp-1)/((double)vp[i]-1);
    }
    if(n==1){
        fout<<nrd<<' '<<sd<<'\n';
    }
    else{
        fout<<2<<' '<<n+1<<'\n';
    }
}
int main(){
    C();
    int t;
    fin>>t;
    for(int i=1;i<=t;i++){
        ll n;
        fin>>n;
        solve(n);
    }
    return 0;
}