Pagini recente » Cod sursa (job #510506) | Cod sursa (job #367104) | Cod sursa (job #425226) | Cod sursa (job #2905123) | Cod sursa (job #2195771)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("pascal.in");
ofstream out("pascal.out");
short leg[3][50000000];
/*
void computeFact(int n) {
for(int i = 2; i <= n; i++) {
int k = i, c = 0;
while(k%2 == 0) {
k /= 2;
c++;
}
ap[0][i] = ap[0][i-1]+c;
k = i;
while(k%3 == 0) {
k /= 3;
c++;
}
ap[1][i] = ap[1][i-1]+c;
k = i;
while(k%5 == 0) {
k /= 5;
c++;
}
ap[2][i] = ap[2][i-1]+c;
}
}*/
int legendre(int n, int k) {
int r = n/k, s = 0, exp = k;
while(r != 0) {
s += r;
exp *= k;
r = n/exp;
}
return s;
}
void computeLeg(int n) {
for(int i = 2; i <= n; i++) {
leg[0][i] = legendre(i, 2);
leg[1][i] = legendre(i, 3);
leg[2][i] = legendre(i, 5);
}
}
int main()
{
int r, d, s = 0, ap[0];
in >> r >> d;
if(d == 6) {
ap[0] = legendre(r, 2);
ap[1] = legendre(r, 3);
for(int j = 1; j < r; j++) {
if(ap[0] - leg[0][j] - leg[0][r-j] > 0 && ap[1] - leg[1][j] - leg[1][r-j] > 0)
s++;
}
} else if (d== 4) {
ap[0] = legendre(r, 2);
for(int j = 1; j < r; j++) {
if(ap[0] - leg[0][j] - leg[0][r-j] > 1)
s++;
}
} else {
ap[0] = legendre(r, d);
int sl;
if(d == 2) sl = 0;
else if(d == 3) sl = 1;
else if(d == 5) sl = 2;
for(int j = 1; j < r; j++) {
if(ap[0] - leg[sl][j] - leg[sl][r-j] > 0)
s++;
}
}
out << s;
return 0;
}