Pagini recente » Cod sursa (job #1104420) | Cod sursa (job #128366) | Cod sursa (job #1315237) | Cod sursa (job #237731) | Cod sursa (job #1741079)
// c[n][k] = c[n][k-1] * k! / (n-k+1)!
// precalculez la fiecare numar puterea lui d care apare in el
// si cand trec de la o combinare la urmatoarea doar adun o putere si scad alta
#include <fstream>
#define DIM 5000010
using namespace std;
ifstream fin ("pascal.in");
ofstream fout("pascal.out");
int n, d, sol, c2, c3, c5;
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+=2) {
D[i] = 1 + D[i/2];
}
}
if (d == 3 || d == 6) {
for (int i=3;i<=n;i+=3) {
T[i] = 1 + T[i/3];
}
}
if (d == 5) {
for (int i=5;i<=n;i+=5) {
C[i] = 1 + C[i/5];
}
}
for (int i=1;i<=n;i++) {
c2 += D[n-i+1] - D[i];
c3 += T[n-i+1] - T[i];
c5 += C[n-i+1] - C[i];
if (d == 2&&c2)
sol++;
else
if (d == 3 && c3)
sol++;
else
if (d == 4 && c2 > 1)
sol++;
else
if (d == 5 && c5)
sol++;
else
if (d == 6 && c2 && c3)
sol++;
}
fout<<sol;
return 0;
}