Processing math: 100%

1. 题目

传送门= ̄ω ̄=

题意:给出 n,求 n!的最右边一个非零位的值

2. 题解

对于这题确实是可以用 O(n)O(nlogn)级别的算法做

但是我们怎么能止步于如此浅薄的层次呢 QvQ

参见 OEIS – A008904

算法过程:

  • 读入 A
  • A转换为 5进制,得到 5进制数字 A5,其第 i位的值为 A5[i]i0开始)
  • ti mod 2=0A5[i]
  • xA[i]i
  • zx+t2 mod 4
  • y2z
  • 则答案为 {6(y mod 2)+y[1(y mod 2)]} mod 10

复杂度 O(log5A)

代码:

#include <bits/stdc++.h>

using namespace std;

int a, x, t, z, y;

vector<int> a5;

void ito5() {while (a) a5.push_back(a % 5), a /= 5;}

int main(int argc, char const* argv[])
{
    scanf("%d", &a), ito5();
    for (int i = 0; i < a5.size(); i += 1)
    {
        if (!(a5[i] & 1)) t += a5[i];
        x += a5[i] * i;
    }
    z = (x + (t >> 1)) % 4, y = (1 << z);
    printf("%d\n", (6 * (y & 1) + y * (1 - (y & 1))) % 10);
    return 0;
}
C++
分类: 文章

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

2 条评论

litble · 2018年4月4日 11:12 上午

太强啦

回复 litble 取消回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注