Pagini recente » Cod sursa (job #2488287) | Cod sursa (job #1362304) | Cod sursa (job #42763) | Cod sursa (job #1909387) | Cod sursa (job #3157575)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
/*void gcd(int a, int b, int &x, int &y){
if(b == 0){
x = 1;
y = 0;
return;
}
int x0,y0;
gcd(b, a % b, x0, y0);
x = y0;
y = x0 - (a / b) * y0;
}
int invmod(int n, int m){
int x,y;
gcd(n,m,x,y);
if(x % m == 0) return m;
else return 1LL * (x % m + m) % m;
}*/
int nrd(int n, int d){
int p = 0;
while(n % d == 0){
p++;
n /= d;
}
return p;
}
int main()
{
int n,d,k,s = 0,xk = 0,xn = 0,xnk = 0,p = 1;
long long val = 1;
fin >> n >> d;
//nr din triunghiul lui pascal de pe linia n pozitia k = C(n - 1,k) = (n - 1)! / (k! * (n - 1 - k)!)
// C(n,k + 1) = C(n,k) * (n - k) / (k + 1);
while(p * d <= n){
p *= d;
xn += n / p;
}
xnk = xn - nrd(n,d);
for(k = 1; k < (n + 1) / 2; k++){
if(xn - (xk + xnk) > 0) s++;
xk += nrd(k + 1,d);
xnk -= nrd(n - k,d);
}
s *= 2;
if(!(n & 1)){
xk += nrd(k + 1,d);
xnk -= nrd(n + k,d);
if(xn - (xk + xnk) > 0) s++;
}
fout << s;
return 0;
}