Cod sursa(job #3227878)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 3 mai 2024 14:27:11
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");

int IsPr[1000001];
int v[1001];
vector <long long> FPrimi;
vector <long long> FPrimifr;

void ClE(){
    IsPr[0] = 0;
    IsPr[1] = 0;
    for (int i=2;i<=1000000;++i){
        IsPr[i] = 1;
    }
    for (int i=2;i<=1000000;++i){
        for (int j=2*i;j<=1000000;j+=i){
            IsPr[j] = 0;
        }
    }
}

int main()
{
    int t;
    fin >> t;
    for (int i=1;i<=t;++i){
        fin >> v[i];
        for (long long j=0;j<=1000001;++j){
            FPrimifr.push_back(0);
            FPrimi.push_back(0);
        }
        int n = v[i];
        while (n>1){
            int y = 2;
            if (n%y==0){
                FPrimi[y] = 1;
            }
            while (n%y==0){
                FPrimifr[y] += 1;
                n /= y;
            }
            y += 1;
            while (n%y>0 and IsPr[y]==0 and n>1){
                y += 1;
            }

        }
        int nrdiv = 1;
        for (long long j=0;j<=1000001;++j){
            nrdiv *= FPrimifr[j]+1;
        }
        int sumdiv = 0;
        int sd = 1;
        int r = 1;
        for (int j=2;j<=1000000;++j){
            if (IsPr[j]==1){
                for (int k=1;k<=FPrimifr[j];++k){
                    r *= j;
                    sd += r;
                }
            }
        }
        sumdiv *= sd;
        fout << nrdiv << ' ' << sumdiv << '\n';
    }
    return 0;
}