N!Again
Problem Description
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)!
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
Author
WhereIsHeroFrom
Source
Recommend
lcy
题目大意:
求N! % 2009的最大值,n最大10^9
解题思路:
参考代码:水体。仔细想想,2009不是质数,7 × 7 × 41 = 2009 ,所以41以后就不用算了,全是0!
#include <iostream>
using namespace std;
const int MAXN = 50;
int n, ans[MAXN];
void init() {
ans[0] = ans[1] = 1;
for (int i = 2; i < 41; i++) {
ans[i] = (ans[i-1] * i) % 2009;
}
}
void solve() {
if (n >= 41) {
cout << 0 << endl;
} else {
cout << ans[n] << endl;
}
}
int main() {
ios::sync_with_stdio(false);
init();
while (cin >> n) {
solve();
}
return 0;
}