1 条题解

  • 0
    @ 2026-9-30 12:33:32

    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
    上传者