Cod sursa(job #2409726)

Utilizator modulopaulModulopaul modulopaul Data 19 aprilie 2019 12:54:41
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define MAXP 1000001
#define MP 78498

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;i++){
        if(prim[i]==0){
            npr++;
            vp[npr]=i;
            for(int d=2;d*i<=MAXP;d++){
                prim[i*d]=1;
            }
        }
    }
}
void solve(int n){
    int nrd=1,sd=1,auxn=n;
    if(prim[auxn]==0){
        fout<<2<<' '<<auxn+1;
        return;
    }
    for(int i=1;vp[i]*vp[i]<=auxn;i++){
        int e=0,pwvp=1;
        while(n%vp[i]==0){
            e++;
            n/=vp[i];
            pwvp*=vp[i];
        }
        pwvp*=vp[i];
        nrd*=e+1;
        sd*=(pwvp-1)/((double)vp[i]-1);
    }
    fout<<nrd<<' '<<sd<<'\n';
}
int main(){
    C();
    int t;
    fin>>t;
    for(int i=1;i<=t;i++){
        int n;
        fin>>n;
        solve(n);
    }
    return 0;
}