Cod sursa(job #3144425)

Utilizator SSKMFSS KMF SSKMF Data 8 august 2023 10:14:26
Problema Pascal Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
using namespace std;

ifstream cin ("pascal.in");
ofstream cout ("pascal.out");

int aparitii[5000001];

int main ()
{
    int linie , divizor;
    cin >> linie >> divizor;

    int factori[3] = {0} , exponent[3] = {0 , 0 , 0};
    if (divizor % 2 == 0) { factori[++factori[0]] = 2; while (!(divizor & 1)) divizor >>= 1 , exponent[factori[0]]++; }
    if (divizor > 1) factori[++factori[0]] = divizor , exponent[factori[0]]++;

    long long actual[3] = {0 , 0 , 0};
    for (int valoare = 2 ; valoare <= linie ; valoare++)
    {
        int copie = valoare; aparitii[valoare] = 2e9;
        for (int indice = 1 ; indice <= factori[0] ; indice++)
        {
            while (copie % factori[indice] == 0) {
                copie /= factori[indice];
                actual[indice]++;
            }

            aparitii[valoare] = min(aparitii[valoare] , int(actual[indice] / exponent[indice]));
        }
    }

    int divizibile = 0;
    for (int coloana = 0 ; coloana <= ((linie - 1) >> 1) ; coloana++)
        if (aparitii[linie] > aparitii[linie - coloana] + aparitii[coloana])
            divizibile += 2;

    if (linie % 2 == 0 && aparitii[linie] > aparitii[linie - (linie >> 1)] + aparitii[linie >> 1])
        divizibile++;

    cout << divizibile;
    cout.close(); cin.close();
    return 0;
}