HDU 3123 GCC
2015-07-20 00:20
344 查看
题意:给出n(n<10^100)和m(m < 1000000),求(0! + 1! + 2! + 3! + 4! + … + n!)%m;
思路:别被n的范围吓到了。如果n大于等于m了,之后的阶乘mod m 都等于0了,根本不用算。所以就判断一下n和m的大小就可以知道阶乘该算到多大了。阶乘的话可以递推着算。这样就o(n)了
思路:别被n的范围吓到了。如果n大于等于m了,之后的阶乘mod m 都等于0了,根本不用算。所以就判断一下n和m的大小就可以知道阶乘该算到多大了。阶乘的话可以递推着算。这样就o(n)了
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { long long k; int m; char s[210]; scanf("%s%d",s,&m); int len = strlen(s); if(len >= 7) k = m; else sscanf(s,"%I64d",&k); long long ans = 1;//答案 long long cas = 1;//阶乘 for(long long i = 1; i <= k; i++) { cas = (cas * i) % m; ans = (ans + cas) % m; } ans %= m;//为什么要mod一下呢。引文如果k = 0, ans就等于1了,没有mod任何数,那么如果m==1的话就错了。我wa了8次才发现。 printf("%I64d\n",ans); } return 0; }
相关文章推荐
- 用fail2ban阻止SSH和VSFTP暴力破解密码
- 2015BJOI day1第三题 糖果candy
- 4495: Least Prime factor 找到最小质因子P的第N小正整数
- POJ 2965.The Pilots Brothers' refrigerator
- POJ 1753.Flip Game
- POJ 3295.Tautology
- Birthday Cake——直线分割
- Spiral——找规律暴力
- POJ 1166&IOI 1994 The blocks 暴力枚举 解题报告
- hdu 1248
- LCM Challenge(暴力)
- 小晴天老师系列——竖式乘法(暴力)
- URAL 1786 Sandro's Biography
- URAL 1788 On the Benefits of Umbrellas
- URAL 1792 Hamming Code
- URAL 1794 Masterpieces of World Architecture
- URAL 1796 Amusement Park
- HDU 5207 Greatest Greatest Common Divisor
- HDU3183 A 4000 Magic Lamp
- [暴力]uva10132 File Fragmentation