Pagini recente » Cod sursa (job #1103825) | Cod sursa (job #562875) | Cod sursa (job #1040807)
#include <fstream>
#include <vector>
using namespace std;
int rval;
inline int many(int x, int y){
rval = 0;
while(x % y == 0){
++rval;
x /= y;
}
return rval;
}
int main(){
ifstream in("pascal.in");
ofstream out("pascal.out");
int r, d, lim;
in >> r >> d;
bool t2, t3, t5;
if(d % 2 == 0)
t2 = true;
if(d % 3 == 0)
t3 = true;
if(d % 5 == 0)
t5 = true;
lim = r / 2;
if(r % 2 == 1)
++lim;
int num[6] = {0}, ans = 0;
for(int i = 1; i < lim; ++i){
if(t2)
num[2] += many(r - i + 1, 2) - many(i, 2);
if(t3)
num[3] += many(r - i + 1, 3) - many(i, 3);
if(t5)
num[5] += many(r - i + 1, 5) - many(i, 5);
if(d == 2){
if(num[2])
++ans;
}
else if(d == 3){
if(num[3])
++ans;
}
else if(d == 4){
if(num[2] > 1)
++ans;
}
else if(d == 5){
if(num[5])
++ans;
}
else{
if(num[2] && num[3])
++ans;
}
}
ans *= 2;
if(r % 2 == 0){
if(t2)
num[2] += many(r - lim + 1, 2) - many(lim, 2);
if(t3)
num[3] += many(r - lim + 1, 3) - many(lim, 3);
if(t5)
num[5] += many(r - lim + 1, 5) - many(lim, 5);
if(d == 2){
if(num[2])
++ans;
}
else if(d == 3){
if(num[3])
++ans;
}
else if(d == 4){
if(num[2] > 1)
++ans;
}
else if(d == 5){
if(num[5])
++ans;
}
else{
if(num[2] && num[3])
++ans;
}
}
out << ans;
return 0;
}