WhereIsHeroFrom: Zty, what are you doing ?
Zty: I want to calculate N!......
WhereIsHeroFrom: So easy! How big N is ?
Zty: 1 <=N <=1000000000000000000000000000000000000000000000…
WhereIsHeroFrom: Oh! You must be crazy! Are you Fa Shao?
Zty: No. I haven's finished my saying. I just said I want to calculate N! mod 2009
Hint : 0! = 1, N! = N*(N-1)!
Input
Each line will contain one integer N(0 <= N<=10^9). Process to end of file.
Output
For each case, output N! mod 2009
Sample Input
4 5
Sample Output
24 120
题目意思是n的阶乘对2009进行取模
首先n的范围很大,暴力求n!并取模很大会超时。但通过观察我们可以发现2009可以被7、41、49整除,那么若n大于等于49之后无论n为何值,n! % 2009必为0(41*49=2009,当n大于等于49,就相当于2009乘以一个数与2009取模,得到的答案必为0),而对于n小于49,只需暴力循环求n!即可(注意,在求n!的过程中要对2009进行取模)
#include<iostream>
using namespace std;
const int mod = 2009;
int main() {
int n, tmp;
while(cin >> n) {
tmp = 1;
if(n >= 49) {
cout << "0" << endl;
continue;
}
for(int i = 2;i <= n;i++) {
tmp = (tmp * i) % mod;
}
cout << tmp << endl;
}
return 0;
}