前言

题目链接:洛谷UVA

题目简述

定义 \(\operatorname{count}(num)\) 表示 \(num\) 末尾 \(0\) 的个数。给出 \(n\)(\(n \leq 10^{18}\)),求 \(\sum \limits _ {i = 0} ^ {n} [2 \mid \operatorname{count}(i!)]\)。

题目分析

对于一个 \(i\),以下记成 \(n\)。

\(n!\) 末尾 \(0\) 的个数取决于 \(1 \sim n\) 中 \(2\) 的幂次之和和 \(5\) 的幂次之和的最小值。又由于 \(2\) 的幂次肯定超过 \(5\) 的幂次之和,参见以下证明:

证明:

\(1 \sim n\) 中,\(2\) 的倍数都至少贡献了 \(1\),\(4\) 的倍数在此基础上,又多贡献了一个 \(1\),以此类推。于是,\(1 \sim n\) 中,\(2\) 的幂次之和为:

\[\sum _ {i = 1} ^ {\infty} \Big \lfloor \cfrac{n}{2 ^ i} \Big \rfloor
\]

对于 \(5\) 同理:

\[\sum _ {i = 1} ^ {\infty} \Big \lfloor \cfrac{n}{5 ^ i} \Big \rfloor
\]

对于每一位考虑。\(\forall i\),\(\Big \lfloor \cfrac{n}{2 ^ i} \Big \rfloor \geq \Big \lfloor \cfrac{n}{5 ^ i} \Big \rfloor\),所以 \(\sum \limits _ {i = 1} ^ {\infty} \Big \lfloor \cfrac{n}{2 ^ i} \Big \rfloor \geq \sum \limits _ {i = 1} ^ {\infty} \Big \lfloor \cfrac{n}{5 ^ i} \Big \rfloor\)。证毕。

那么,末尾 \(0\) 的个数等于 \(1 \sim n\) 中 \(5\) 的幂次之和。

\[\operatorname{count}(n!) = \sum _ {i = 1} ^ {\infty} \Big \lfloor \cfrac{n}{5 ^ i} \Big \rfloor
\]

那么答案有:

\[ans = \sum _ {i = 0} ^ {n} \Bigg [ 2 \mid \sum _ {j = 1} ^ {\infty} \Big \lfloor \cfrac{i}{5 ^ j} \Big \rfloor \Bigg ]
\]

发现把 \(i\) 用 \(5\) 进制表示成 \(i = \overline{x_mx_{m-1}\ldots x_0}\),那么 \(\Big \lfloor \cfrac{}{5^j} \Big \rfloor\) 就是 \(5\) 进制下的移位。也即 \(\Big \lfloor \cfrac{i}{5^j} \Big \rfloor = \overline{x_mx_{m-1}\ldots x_j}\)。我们只关心这个式子的奇偶性。拆开:\(\overline{x_mx_{m-1}\ldots x_j} = \sum \limits _ {k = j} ^ {m} 5 ^ {k - j} x_k\),而 \(5 \bmod 2 = 1\),故上式与 \(\sum \limits _ {k = j} ^ {m} x_k\) 同奇偶。接下来继续化式子。

\[\begin{aligned}
ans &= \sum _ {i = 0} ^ {n} \Bigg [ 2 \mid \sum _ {j = 1} ^ {\infty} \Big \lfloor \cfrac{i}{5 ^ j} \Big \rfloor \Bigg ] \\
&= \sum _ {i = 0} ^ {n} \Bigg [ 2 \mid \sum _ {j = 1} ^ {m} \sum \limits _ {k = j} ^ {m} x_k \Bigg ] \\
&= \sum _ {i = 0} ^ {n} \Bigg [ 2 \mid \sum _ {j = 1} ^ {m} x_j \times j \Bigg ] \\
&= \sum _ {i = 0} ^ {n} \Bigg [ 2 \mid \sum _ {j = 1 \land j \bmod 2 = 1} ^ {m} x_j \Bigg ] \\
\end{aligned}
\]

也即,\(n!\) 某位有偶数个 \(0\),等价于其在 \(5\) 进制表示下,奇数位的和能否被 \(2\) 整除。答案就是 \(0 \sim n\) 中,在 \(5\) 进制表示下,奇数位的和能被 \(2\) 整除的数字的个数。这个使用数位 DP 即可。状态记录剩余几位、目前奇数位的和被 \(2\) 除的余数。

代码

#include <cstdio>

long long n, f[30][2];
int yzh[30], len; long long dp(int len, bool limit, bool sum) {
if (!~len) return !sum;
if (!limit && f[len][sum]) return f[len][sum];
long long res = 0;
for (int i = limit ? yzh[len] : 4; ~i; --i)
res += dp(len - 1, limit && i == yzh[len], (len & 1) ? (sum ^ (i & 1)) : sum);
if (!limit) f[len][sum] = res;
return res;
} inline long long solve() {
for (len = -1; n; yzh[++len] = n % 5, n /= 5);
return dp(len, true, 0);
} signed main() {
while (scanf("%lld", &n), ~n) printf("%lld\n", solve());
return 0;
}

Odd and Even Zeroes 题解的更多相关文章

  1. UVALive - 6575 Odd and Even Zeroes 数位dp+找规律

    题目链接: http://acm.hust.edu.cn/vjudge/problem/48419 Odd and Even Zeroes Time Limit: 3000MS 问题描述 In mat ...

  2. UVA 12683 Odd and Even Zeroes(数学—找规律)

    Time Limit: 1000 MS In mathematics, the factorial of a positive integer number n is written as n! an ...

  3. Lintcode373 Partition Array by Odd and Even solution 题解

    [题目描述] Partition an integers array into odd number first and even number second. 分割一个整数数组,使得奇数在前偶数在后 ...

  4. UVa 12683 Odd and Even Zeroes(数论+数字DP)

    意甲冠军: 要求 小于或等于n号码 (0<=n <= 1e18)尾数的数的阶乘0数为偶数 思考:当然不是暴力,因此,从数论.尾数0数为偶数,然后,它将使N阶乘5电源是偶数.(二指数肯定少5 ...

  5. 【HackerRank】Find the Median(Partition找到数组中位数)

    In the Quicksort challenges, you sorted an entire array. Sometimes, you just need specific informati ...

  6. 算法与数据结构基础 - 链表(Linked List)

    链表基础 链表(Linked List)相比数组(Array),物理存储上非连续.不支持O(1)时间按索引存取:但链表也有其优点,灵活的内存管理.允许在链表任意位置上插入和删除节点.单向链表结构一般如 ...

  7. 算法与数据结构基础 - 双指针(Two Pointers)

    双指针基础 双指针(Two Pointers)是面对数组.链表结构的一种处理技巧.这里“指针”是泛指,不但包括通常意义上的指针,还包括索引.迭代器等可用于遍历的游标. 同方向指针 设定两个指针.从头往 ...

  8. 【读书笔记】Cracking the Code Interview(第五版中文版)

    导语 所有的编程练习都在牛客网OJ提交,链接: https://www.nowcoder.com/ta/cracking-the-coding-interview 第八章 面试考题 8.1 数组与字符 ...

  9. 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】

    很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...

  10. LeetCode题解之 Odd Even Linked List

    1.题目描述 2.问题分析 将链表拆分成两个,奇数节点形成一个链表,偶数节点形成另外一个链表,最后将偶数节点链表加在奇数节点链表后面. 3.代码 ListNode* oddEvenList(ListN ...

随机推荐

  1. 「C++」复杂模拟【壹】

    建议开启目录食用 阅读本文之前建议您先看这里,如果您已经看完了,那么就可以放心大胆的学习本文了. 我认为其实本文的难度还是比较大的,今天我们题是来自山东省省选,所以建议大家谨慎阅读,如果您是专业程序员 ...

  2. JAVA Stream在jdk17下的例子

    最近因为某些原因,又要用stream,所以耗费了一些时间,做了一些例子,以便自己后续参考. 环境: windows11 jdk 17 spring 2.6.7 Article类代码: package ...

  3. Linux/Unix-stty命令详解

    文章目录 介绍 stty命令的使用方法 stty的参数 我常用的选项 所有选项 介绍 stty用于查询和设置当前终端的配置. 如果你的终端回车不换行.输入命令不显示等各种奇葩问题,那么stty命令可以 ...

  4. dotnet 融合 Avalonia 和 UNO 框架

    现在在 .NET 系列里面,势头比较猛的 UI 框架中,就包括了 Avalonia 和 UNO 框架.本文将告诉大家如何尝试在一个解决方案里面融合 Avalonia 和 UNO 两个框架,即在一个进程 ...

  5. LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理

    LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理 LLM 技术图谱(LLM Tech Map)是将 LLM 相关技术进行系统化和图形化的呈现,此图谱主要特点是&qu ...

  6. Qt 之 emit、signals、slot的使用

    背景 ref : https://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html 信号和槽机制是 QT ...

  7. Fake权限验证小例子

    前言 关于本地测试如何进行Fake权限验证 正文 在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验 ...

  8. SqlCel 和MySQL for Excel在批量处理数据上的优劣

    先放MySQL for Excel编辑数据的界面, 理论上可以批量修改数据....但是: 百度翻译如下: 更改不被允许.....[经测试,64位的Excel出现同样的情况] 转换思路:不使用公式去匹配 ...

  9. hadoop集群配置文件与功能对应解析

    以三个节点的集群为例: 总括: nodemanager ,datanode  --> slavesresourcemanager ---------->    yarn namenode ...

  10. Openstack制作Rhel9,使用IOS镜像制作

    转自作者自己的CSDN  拷贝 ==================== 需要已有环境: 1.Openstack 2.qume-img,kvm,virsh.... (yum install qemu- ...