Pagini recente » Cod sursa (job #2124001) | Cod sursa (job #2140746) | Cod sursa (job #2068976) | Cod sursa (job #3318156) | Cod sursa (job #3350794)
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int R, D;
struct Factor
{
int fact, exp;
Factor(int f = 0, int e = 0)
{
this->fact = f;
this->exp = e;
}
};
Factor F[2];
int cnt;
void Init()
{
if(D == 2 || D == 3 || D == 5)
F[cnt++] = Factor(D, 0);
else
if(D == 4)
F[cnt++] = Factor(2, 0);
else // if(D == 6)
{
F[cnt++] = Factor(2, 0);
F[cnt++] = Factor(3, 0);
}
}
void Update(int n, int t)
{
int aux = n;
for(int i = 0; i < cnt; i++)
{
n = aux;
while(n % F[i].fact == 0)
{
F[i].exp += t;
n /= F[i].fact;
}
}
}
inline void Mult(int n) { Update(n, 1); }
inline void Div(int n) { Update(n, -1); }
bool Verif()
{
if(D != 4)
{
for(int i = 0; i < cnt; i++)
if(F[i].exp <= 0)
return false;
return true;
}
return F[0].exp >= 2;
}
int main()
{
f >> R >> D;
Init();
int res = 0;
for(int i = 1; i <= (R >> 1); i++)
{
Mult(R - i + 1);
Div(i);
if(Verif())
res += 2;
}
if(!(R & 1) && Verif())
res--;
g << res << '\n';
f.close();
g.close();
return 0;
}