Pagini recente » Cod sursa (job #1279505) | Cod sursa (job #3281696) | Cod sursa (job #1596522) | Cod sursa (job #749019) | Cod sursa (job #799513)
Cod sursa(job #799513)
#include <fstream>
using namespace std;
inline int min (int a, int b) {
return a > b ? b : a;
}
inline int max (int a, int b) {
return a > b ? a : b;
}
int gf(int nr, int d)
{
int i;
for(i=0; ((nr%d == 0) && nr); i++) nr = nr/d;
return i;
}
int main()
{
int r, d;
int j, a1, a2;
int x2, x3, x5, cnt, i;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
fin>>r; fin>>d;
x2 = 0; x3 = 0; x5 = 0; cnt = 0;
for(i=0; i < (r >> 1); i++)
{
a1 = r-i;
a2 = i+1;
if(!(d & 1))
{
for(j=0; (!(a1 & 1)) && a1; j++) a1 = a1 >> 1;
x2 = x2 + j;
for(j=0; (!(a2 & 1)) && a2; j++) a2 = a2 >> 1;
x2 = x2 - j;
if(d == 2) if(x2 > 0) cnt++;
if(d == 4) if(x2 > 1) cnt++;
}
if(d % 3 == 0)
{
for(j=0; ((a1%3 == 0) && (a1)); j++) a1 = a1/3;
x3 = x3 + j;
for(j=0; ((a2%3 == 0) && (a2)); j++) a2 = a2/3;
x3 = x3 - j;
if(d == 3) if (x3 > 0) cnt++;
if(d == 6) if (min (x2, x3) > 0) cnt++;
continue;
}
if (d % 5 == 0)
{
for (j=0; ((a1%5 == 0) && (a1)); j++) a1 = a1/5;
x5 = x5 + j;
for (j=0; ((a2%5 == 0) && (a2)); j++) a2 = a2/5;
x5 = x5 - j;
if (d == 5) if (x5 > 0) cnt++;
continue;
}
}
cnt = cnt << 1;
if(!(r & 1))
{
x2 = x2 + gf(r-i, 2);
x3 = x3 + gf(r-i, 3);
x5 = x5 + gf(r-i, 5);
x2 = x2 - gf(i+1, 2);
x3 = x3 - gf(i+1, 3);
x5 = x5 - gf(i+1, 5);
if(d == 2) if(x2 > 0) cnt--;
if(d == 3) if(x3 > 0) cnt--;
if(d == 4) if(x2 > 1) cnt--;
if(d == 5) if(x5 > 0) cnt--;
if(d == 6) if(min(x2, x3) > 0) cnt--;
}
fout<<cnt;
return 0;
}