ArnoldC, 702 698 698634 bytes
LISTEN TO ME VERY CAREFULLY f I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE n I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE p GIVE THESE PEOPLE AIR HEY CHRISTMAS TREE r YOU SET US UP 1 HEY CHRISTMAS TREE c YOU SET US UP 0 BECAUSE I'M GOING TO SAY PLEASE n STICK AROUND n GET TO THE CHOPPER r HERE IS MY INVITATION r YOU'RE FIRED n ENOUGH TALK GET TO THE CHOPPER n HERE IS MY INVITATION n GET DOWN p ENOUGH TALK GET TO THE CHOPPER c HERE IS MY INVITATION 0 LET OFF SOME STEAM BENNET n ENOUGH TALK BECAUSE I'M GOING TO SAY PLEASE c GET TO THE CHOPPER n HERE IS MY INVITATION 0 ENOUGH TALK YOU HAVE NO RESPECT FOR LOGIC CHILL YOU HAVE NO RESPECT FOR LOGIC I'LL BE BACK r HASTA LA VISTA, BABY Translated to pseudocode:
f(n,p) { r=1; c=0; if (n) { while (n) { r=r*n; n=n-p; c=n<0; if (c) n=0; } } return r; } Note: ArnoldC has only one type of data: 16-bit signed integer. Hence I cannot test the 420!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! case.