Pagini recente » Cod sursa (job #2544037) | Cod sursa (job #1314387) | Cod sursa (job #1968129) | Cod sursa (job #1828477) | Cod sursa (job #1741056)
// 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;
}
}
}
int n2 = (n+1)/2;
if (d == 2) {
for (int i=1;i<n2;i++) {
x = D[n] - D[i] - D[n-i];
if (x)
sol+=2;
}
if (n%2 == 0) {
x = D[n] - D[n2+1] - D[n-n2-1];
if (x)
sol++;
}
}
if (d == 3) {
for (int i=1;i<n2;i++) {
x = T[n] - T[i] - T[n-i];
if (x)
sol+=2;
}
if (n%2 == 0) {
x = T[n] - T[n2+1] - T[n-n2-1];
if (x)
sol++;
}
}
if (d == 5) {
for (int i=1;i<n2;i++) {
x = C[n] - C[i] - C[n-i];
if (x)
sol+=2;
}
if (n%2 == 0) {
x = C[n] - C[n2+1] - C[n-n2-1];
if (x)
sol++;
}
}
if (d == 4) {
for (int i=1;i<n2;i++) {
x = D[n] - D[i] - D[n-i];
if (x>=2)
sol+=2;
}
if (n%2 == 0) {
x = D[n] - D[n2+1] - D[n-n2-1];
if (x>=2)
sol++;
}
}
if (d == 6) {
for (int i=1;i<n2;i++) {
x = D[n] - D[i] - D[n-i];
y = T[n] - T[i] - T[n-i];
if (x && y)
sol+=2;
}
if (n%2 == 0) {
x = D[n] - D[n2+1] - D[n-n2-1];
y = T[n] - T[n2+1] - T[n-n2-1];
if (x && y)
sol++;
}
}
fout<<sol;
return 0;
}