Fork me on GitHub




#include<stdio.h> #include<cmath> #include<string.h> __int64 p[95]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103, 107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211, 223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331, 337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449, 457,461,463,467,479,487,491,499}; int main() { __int64 n,m,i,j,a[95],b[95],tmp,res,tmpn,tmpm; while(scanf("%I64d%I64d",&n,&m)!=EOF) { if(n%2==0&&m>n/2||n%2!=0&&m>n/2+1) {printf("0\n");continue;} n=n-m+1; tmpn=n;tmpm=m; memset(a,0,sizeof a);memset(b,0,sizeof b); for(i=0;i<95;i++) { n=tmpn;m=tmpm;tmp=tmpn-tmpm; while(n/p[i]) {a[i]+=n/p[i];n/=p[i];} while(m/p[i]) {a[i]-=m/p[i];m/=p[i];} while(tmp/p[i]) {a[i]-= tmp/p[i] ;tmp/=p[i];} } res=1; for(i=0;i<95;i++) { tmp=p[i]; while(a[i]>0) { if(a[i]&1) { res*=tmp; res%=10007; } a[i]>>=1; tmp*=p[i];tmp%=10007; } } printf("%I64d\n",res); } return 0; }

 

posted on 2013-03-06 20:45  huashiyiqike  阅读(215)  评论(0编辑  收藏  举报