Pagini recente » Cod sursa (job #103529) | Cod sursa (job #952470) | Cod sursa (job #2223348) | Cod sursa (job #1303092) | Cod sursa (job #3137751)
#include <bits/stdc++.h>
#pragma GCC optimize ("fast-math", "unroll-loops")
using namespace std;
ifstream in ("pascal.in");
ofstream out ("pascal.out");
int get (int n, int k)
{
int ans = 0;
while (n)
ans += n / k, n /= k;
return ans;
}
int main()
{
int n, d;
in >> n >> d;
/**
C(n, k) * x = C(n, k+1)
f[n] / (f[k] * f[n-k]) * x = f[n] / (f[k+1] * f[n-k-1])
x = f[k] * f[n-k] / (f[k+1] * f[n-k-1]) = (n-k) / (k+1)
**/
int ans = 0;
if (d == 2)
{
for (int i=0; i<=n; i++)
{
if (get(n, 2) - get(i, 2) - get(n-i, 2) > 0)
ans++;
}
out << ans;
}
else if (d == 3)
{
for (int i=0; i<=n; i++)
{
if (get(n, 3) - get(i, 3) - get(n-i, 3) > 0)
ans++;
}
out << ans;
}
else if (d == 5)
{
for (int i=0; i<=n; i++)
{
if (get(n, 5) - get(i, 5) - get(n-i, 5) > 0)
ans++;
}
out << ans;
}
else if (d == 4)
{
for (int i=0; i<=n; i++)
{
if (get(n, 2) - get(i, 2) - get(n-i, 2) > 1)
ans++;
}
out << ans;
}
else
{
for (int i=0; i<=n; i++)
{
if (get(n, 2) - get(i, 2) - get(n-i, 2) > 0 && get(n, 3) - get(i, 3) - get(n-i, 3) > 0)
ans++;
}
out << ans;
}
return 0;
}