1 条题解
-
0
C++ :
#include <cstdio> typedef long long ll; /* 拼接出的整数对 5 取模,只取决于它的「最后一位」(10^k ≡ 0 (mod 5), k>=1)。 每个数 v 作为最后一位出现在 (n-1)! 个排列中 ⇒ 答案 = (n-1)! * Σ_{v=1..n}(v mod 5)。 */ static const ll MOD = 1000000007LL; int main(){ ll n; if(scanf("%lld", &n) != 1) return 0; ll fact = 1; for(ll i = 2; i <= n - 1; i++) fact = fact * (i % MOD) % MOD; ll cyc = n / 5, rem = n % 5; ll S = (cyc % MOD) * 10 % MOD; /* 每 5 个一组 (1+2+3+4+0)=10 */ for(ll v = cyc * 5 + 1; v <= n; v++) S = (S + v % 5) % MOD; printf("%lld\n", fact * (S % MOD) % MOD); return 0; }
- 1
信息
- ID
- 2585
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者