TOJ 4111 Binomial efficient calculate C(n,k)
2015-07-08 13:56
253 查看
For Mod 2^n,you can also use &(2^n-1),it will more faster.
M % (2^n) = M & (2^n-1);
It's use a way to get all quality factors of N!.
The portal:http://acm.tju.edu.cn/toj/showp4111.html
M % (2^n) = M & (2^n-1);
It's use a way to get all quality factors of N!.
The portal:http://acm.tju.edu.cn/toj/showp4111.html
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> const long long N = 1000000; long long tag[1000006],p[1000006],numtot; long long Mod; long long a1[1000006]; long long Fast_Power(long long n,long long k){ long long ans = 1; while(k){ if(k & 1) ans = ( ans * n ) % Mod; k /= 2; n = ( n * n ) % Mod; } return ans; } void Get_prime() { long long cnt = 0; memset(tag,0,sizeof(tag)); for (long long i = 2; i <= N; i++) { if (!tag[i]) p[cnt++] = i; for (long long j = 0; j < cnt && p[j] * i <= N; j++) { tag[i*p[j]] = 1; if (i % p[j] == 0) break; } } numtot = cnt; } void Deal_with(){ long long T,n,k; scanf("%lld",&T); while(T--){ scanf("%lld %lld",&n,&k); //memset(a1,0,sizeof(a1)); Can't use memset,It's TLE. int tempi; for(long long i=0;i<numtot;i++){ if(p[i] > n)break; a1[p[i]] = 0; for(long long j=p[i];j<=n;j *= p[i])a1[p[i]] += n / j; for(long long j=p[i];j<=k;j *= p[i])a1[p[i]] -= k / j; for(long long j=p[i];j<=n-k;j *= p[i])a1[p[i]] -= (n-k) / j; tempi = i; } Mod = 1; for(long long i=1;i<=32;i++){ Mod *= 2; } long long ans = 1; for(long long i=0;i<=tempi;i++){//It should use tempi,Because if i > tempi,it's no initialization. ans = ( ans * Fast_Power(p[i],a1[p[i]]) ) % Mod; } printf("%lld\n",ans); } } int main(void){ Get_prime(); Deal_with(); return 0; }
相关文章推荐
- Ubuntu上NFS的安装配置,启用nfs功能
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- .NET: XML
- 20世纪《福布斯》二十本最具影响力的商业书籍
- 如何给linux添加新硬盘
- [Selenium 2]—WebDriver 驱动说明
- maven 与 jenkins 集成的时候,打包出现错误处理
- [leedcode 24] Swap Nodes in Pairs
- opencv 绘图 cvLine cvRectangle cvCircle cvEllipse cvEllipseBox cvFillPoly cvConvexPoly cvPolyLine
- CSS 小技巧1——水平居中和垂直居中的方法
- searchbar下的搜索图标及textfiled样式修改
- editor多功能文本框在有些计算机上不能正常加载,解决方法,本人用的是把js调用方法放到<body></body>后面)
- const char与unsigned char的转换
- Lucas的数论(math)
- 讨价还价
- sizeof用法汇总
- STL - stack(栈)
- 每天一个linux命令(21):find命令之xargs
- STL - stack(栈)
- cookie 编程