Pagini recente » Clasament autumn2007-runda3 | Cod sursa (job #2866488) | Cod sursa (job #2494296) | Cod sursa (job #2588600) | Cod sursa (job #2910637)
#include <fstream>
using namespace std;
ifstream cin("pascal.in");
ofstream cout("pascal.out");
long long a, b, i, j, L, nr, k, aux, maxx, poz, d, r, c, ramas2, ramas3, un2, un3;
int f2(int n){
int dd=2;
int aux=0;
while(dd<=n){
aux+=n/dd;
dd*=2;
}
return aux;
}
int f3(int n){
int dd=3;
int aux=0;
while(dd<=n){
aux+=n/dd;
dd*=3;
}
return aux;
}
int fact(int n){
int cnt=0;
int cnt2=0;
/// exponentul lui d in n!
if(d!=6 && d!=4){
int dd=d;
while(dd<=n){
cnt+=n/dd;
dd*=d;
}
}
else{
if(d==4){
cnt=f2(n);
if(cnt%2)
un2=1;
cnt/=2;
}
else{
cnt=f2(n);
cnt2=f3(n);
cnt=min(cnt, cnt2);
if(cnt2>cnt)
un3=cnt2-cnt;
else
un2=cnt-cnt2;
}
}
return cnt;
}
int main() {
cin>>r>>d;
///(i!)/((i-j)!*j!)
for(i=1;i<r;i++){
un2=0;
un3=0;
a=fact(r);
ramas2=un2;
ramas3=un3;
un2=0;
un3=0;
b=fact(r-i);
ramas2-=un2;
ramas3-=un3;
un2=0;
un3=0;
c=fact(i);
ramas2-=un2;
ramas3-=un3;
///cout<<a<<" "<<b<<" "<<c<<" "<<ramas2<<" "<<ramas3<<"\n";
if(a-(b+c)>1)
nr++;
else
if(a-(b+c)==1){
if(ramas2>=0 && ramas3>=0)
nr++;
}
}
cout<<nr;
}