Pagini recente » Profil petruzdroba | Profil MohamedXXX | Cod sursa (job #2212840) | Profil Kimin | Cod sursa (job #3157579)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
struct factori{
int f2,f3,f5;
};
void init(factori &x){
x.f2 = x.f3 = x.f5 = 0;
}
void update(int n, factori &x, int semn){
while(n % 2 == 0){
x.f2 = x.f2 + semn;
n /= 2;
}
while(n % 3 == 0){
x.f3 = x.f3 + semn;
n /= 3;
}
while(n % 5 == 0){
x.f5 = x.f5 + semn;
n /= 5;
}
}
bool verif(factori xn, factori xk, factori xnk, int d){
if(d == 2) return (xn.f2 - (xk.f2 + xnk.f2)) > 0;
if(d == 3) return (xn.f3 - (xk.f3 + xnk.f3)) > 0;
if(d == 4) return (xn.f2 - (xk.f2 + xnk.f2)) > 1;
if(d == 5) return (xn.f5 - (xk.f5 + xnk.f5)) > 0;
if(d == 6) return (xn.f2 - (xk.f2 + xnk.f2)) > 0 && (xn.f3 - (xk.f3 + xnk.f3)) > 0;
}
int main()
{
int n,d,k,s = 0,p = 1;
factori xn,xk,xnk;
init(xnk);
init(xn);
init(xk);
long long val = 1;
fin >> n >> d;
while(p * 2 <= n){
p *= 2;
xn.f2 += n / p;
xnk.f2 += n / p;
}
p = 1;
while(p * 3 <= n){
p *= 3;
xn.f3 += n / p;
xnk.f3 += n / p;
}
p = 1;
while(p * 5 <= n){
p *= 5;
xn.f5 += n / p;
xnk.f5 += n / p;
}
update(n,xnk,-1);
for(k = 1; k < (n + 1) / 2; k++){
if(verif(xn,xk,xnk,d)) s++;
update(k + 1,xk,1);
update(n - k,xnk,-1);
}
s *= 2;
if(!(n & 1)){
if(verif(xn,xk,xnk,d)) s++;
}
fout << s;
return 0;
}