直接从
1
1
1 到
r
r
r 枚举,每次乘积
m
u
l
mul
mul 乘上
i
i
i 再模
k
k
k,若
l
l
l 在
l
l
l 和
r
r
r 之间则记录最大值,注意
k
k
k 的最大值为
1
0
12
10^{12}
1012,这暗示我们要开long long
。
r r r 的最大值为 2 × 1 0 6 2 \times 10^6 2×106,所以 O ( n ) O(n) O(n) 的时间复杂度足够了。
Code:
#include <iostream>
#include <cmath>
#define int long long
using namespace std;
main() {
int k, l, r, mul = 1, ans = 0;
cin >> l >> r >> k;
for (int i = 1; i <= r; i ++ ) {
mul = mul * i % k;
ans = (i > l - 1 ? max(ans, mul) : ans);
}
cout << ans;
}