Pagini recente » Cod sursa (job #1122178) | Cod sursa (job #223298) | Cod sursa (job #2390510) | Borderou de evaluare (job #2014411) | Cod sursa (job #2809608)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
const int MAXN = 5000001;
int Exp[6][MAXN]; // Exp[d][i] = Exponentul lui d din descompunerea lui i
int main() {
int R, D, c2, c3, c5, total, E2, E3, E5;
fin >> R >> D;
// Base-case
Exp[2][2] = Exp[3][3] = Exp[5][5] = 1;
for(int i = 2; i <= R; i++) {
if(i % 2 == 0)
Exp[2][i] = Exp[2][i / 2] + 1;
if(i % 3 == 0)
Exp[3][i] = Exp[3][i / 3] + 1;
if(i % 5 == 0)
Exp[5][i] = Exp[5][i / 5] + 1;
}
// Sume partiale pentru factoriale
for(int i = 2; i <= R; i++) {
Exp[2][i] += Exp[2][i-1];
Exp[3][i] += Exp[3][i-1];
Exp[5][i] += Exp[5][i-1];
}
// Vedem cum se descompune D
c2 += (D % 2 == 0);
c3 += (D % 3 == 0);
c2 += (D % 4 == 0);
c5 += (D % 5 == 0);
total = E2 = E3 = E5 = 0;
for(int i = 1; i <= R; i++) { // Incercam sa simplificam formula de combinari
E2 = Exp[2][R] - Exp[2][i] - Exp[2][R-i];
E3 = Exp[3][R] - Exp[3][i] - Exp[3][R-i];
E5 = Exp[5][R] - Exp[5][i] - Exp[5][R-i];
total += (E2 >= c2 && E3 >= c3 && E5 >= c5);
}
fout << total << "\n";
return 0;
}