Cod sursa(job #1798627)

Utilizator deuceffsMircea Burlacu deuceffs Data 5 noiembrie 2016 12:30:16
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <cmath>
#include <string>
#include <vector>


using namespace std;

int n;
bool numz[1000002];
vector<int> prime;
void ciur(int N){
    for (int i = 2; i<=1000002; i++){
        if (numz[i] == 0){
            for (int d = i+i; d<=1000002; d+=i){
                numz[d] = 1;
                };
            prime.push_back(i);
        };
    };
}
int getNumOfDivs(int n){
    int nOfDvs(1);
    int cnt(0);
    for (int i = 0; i <prime.size() && prime[i] * prime[i] <= n; i++){
        cnt = 0;
        while (n % prime[i] == 0 && n != 1){
            n /= prime[i];
            cnt++;
        };
        if (cnt != 0){
            nOfDvs *= (cnt+1);
        };
    };
    if (n > 1) nOfDvs *= 2;
    return nOfDvs;
}

int main() {
    ifstream inFile("maxd.in");
    ofstream outFile("maxd.out");
    long long a, b, maxdivs(0);
    long minnr(2000000);
    inFile>>a>>b;
    ciur(b);
    int divvz;
    for (int q = a; q <= b; q++){
        divvz = getNumOfDivs(q);
        if (divvz > maxdivs) maxdivs = divvz;
    };
    int contor(0);
    for (int d = a; d <= b; d++){
        if (getNumOfDivs(d) == maxdivs){
            if (d < minnr){
                minnr = d;
            };
            contor++;
        };
    };
    outFile<<minnr<<" "<<divvz<<" "<<contor;
    return 0;

}