离散数学之数论
翻了翻课本,看到数论一章有一个问题:20!的二进制表示从最低位数起有多少个连续的 0 。
课本上直接求 1到20的数 含有因子2的个数和,求出来是 18. 各种不理解,然后百度。看到了《编程之美》一书有同样的问题。
以下内容部分摘自: 大神的读书笔记
有两个问题,用到的方法类似
(1)给定一个整数N,那么N的阶乘N!末尾有多少个0?比如:N=10,N!=3628800,N!的末尾有2个0。
(2)求N!的二进制表示中最低位为1的位置。(这个的意思就是求出多少个连续的0 加一 就是位置)
主要分析第二个问题。当时很不理解 为什么要求7!的质因数分解后 2 的个数。
奇数的二进制表示末尾都是 1,奇数*奇数=奇数。我们可以这样想,1-7的奇数全部相乘,再乘偶数,每乘一个偶数,就会多k(取决质因子2的个数)个0 对 7! 进行质因数分解就可以了。
书上也用到了一个很巧妙的方法:
N!中含有质因数2的个数等于:[N/2]+[N/4]+[N/8]+…
自行理解~