Pagini recente » Cod sursa (job #695892) | Cod sursa (job #2244290) | Cod sursa (job #3283215) | Cod sursa (job #1536667) | Cod sursa (job #3144425)
#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;
}