Pagini recente » Cod sursa (job #39282) | Cod sursa (job #2683981) | Cod sursa (job #2925973) | Cod sursa (job #3135010) | Cod sursa (job #1740987)
// precalculez la ce putere apar 2,3,5 in descompunerea lui x!
// folosesc asta pentru a calcula apoi la ce putere apar numerele in combinari, folosind
// formula combinarilor
#include <fstream>
#define DIM 5000010
using namespace std;
ifstream fin ("pascal.in");
ofstream fout("pascal.out");
int n, d, sol, x, y;
int D[DIM], T[DIM], C[DIM];
int main () {
fin>>n>>d;
if (d == 2 || d == 4 || d == 6) {
for (int i=2;i<=n;i++) {
int p = 2;
D[i] = 0;
while (p<=i) {
D[i] +=i/p;
p*=2;
}
}
}
if (d == 3 || d == 6) {
for (int i=2;i<=n;i++) {
int p = 3;
T[i] = 0;
while (p<=i) {
T[i] +=i/p;
p*=3;
}
}
}
if (d == 5) {
for (int i=2;i<=n;i++) {
int p = 5;
C[i] = 0;
while (p<=i) {
C[i] +=i/p;
p*=5;
}
}
}
if (d == 2) {
for (int i=1;i<=n;i++) {
x = D[n] - D[i] - D[n-i];
if (x)
sol++;
}
}
if (d == 3) {
for (int i=1;i<=n;i++) {
x = T[n] - T[i] - T[n-i];
if (x)
sol++;
}
}
if (d == 5) {
for (int i=1;i<=n;i++) {
x = C[n] - C[i] - C[n-i];
if (x)
sol++;
}
}
if (d == 4) {
for (int i=1;i<=n;i++) {
x = D[n] - D[i] - D[n-i];
if (x>=2)
sol++;
}
}
if (d == 6) {
for (int i=1;i<=n;i++) {
x = D[n] - D[i] - D[n-i];
y = T[n] - T[i] - T[n-i];
if (x && y)
sol++;
}
}
fout<<sol;
return 0;
}