Cod sursa(job #865913)

Utilizator ELHoriaHoria Cretescu ELHoria Data 27 ianuarie 2013 11:41:23
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
 
int R, D;
int curr[3], cond[3];
const int divs[3] = {2,3,5};
 
inline void getDivisors(int val,int s) {
    while((val & 1) == 0) {
		val >>= 1;
        curr[0] += s;
    }
    while(val%3 == 0) {
		val /= 3;
        curr[1] += s;
    }
    while(val%5 == 0) {
        val /= 5;
        curr[2] += s;
    }
}
inline bool isDivisible() {
	switch (D){
		case 6 : return (curr[0] > 0 && curr[1] > 0);
		case 5 : return curr[2] > 0;
		case 4 : return curr[0] > 1;
		case 3 : return curr[1] > 0;
	}
	return curr[0] > 0;
}
 
int main()
{
    freopen("pascal.in","r",stdin);
    freopen("pascal.out","w",stdout);
    scanf("%d %d",&R,&D);
    int ans = 0;
    int r = (R - 1)>>1;
    for(int i = 1;i <= r;i++) {
        getDivisors(R - i + 1,1);
        getDivisors(i,-1);
		ans += 2*isDivisible();
    }
    if(R%2 == 0) {
        r++;
        getDivisors(R - r + 1,1);
        getDivisors(r,-1);
		ans += isDivisible();
    }
    printf("%d\n",ans);
    return 0;
}