- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何计算大数阶乘的最后几位非零数字?
总的来说,我的意思是像 n=10^100 之类的
(编辑:10^100 是 n 中“n”的大小!)
很少,我的意思是直到 7-8 点......
我试着用谷歌搜索它并找到了这个 -
Last non-zero digit of a factorial
我试图将其扩展到最后 2 个非零数字或更多,但失败了...
我在 google 上找到了其他显示如何计算最后 x 位数的网站,但不清楚,我也无法理解...
谁能帮我解决这个问题?
此外,我无法得到这个,99 的最后两个非零数字!是 64,所以我认为(199!/99!)的最后两个非零数字也应该是 64,但结果是 24,我知道我正在制作一个非常大的这一个中的逻辑错误,我只是无法指责它!
最佳答案
进行计算的诀窍是您要找到 3 个数字。
5 的因数个数就是 10 的因数个数。然后从 5 的因数个数中减去 2 的因数个数。计算出 2 的最后几位数字的次方。将其乘以在第 3 步中找到的最后几位数字,就完成了。
5 的因数个数可以如下计算。取 n/5(向下舍入)。这就是第一个因子为 5 的数量。然后是 n/25(向下舍入)。有多少第二个因子是 5。继续,直到完成。
2的因数的个数可以类似地用数列2、4、8、16代替。
第三部分比较棘手。
但更容易做的是找出所有数字的乘积,直到并包括 n
,它们与 2 和 5 互质。调用该函数 f(n )
。您可以通过将相对质数乘以 mod 10^k 来计算它。并利用 f(i * 10^k + j) = f(j) mod(10^k)
这一事实。
然后你要f(n)*f(n/2)*f(n/4)*f(n/5)*f(n/8)*f(n的最后几位/10)*f(n/16)*...
。有效地生成该序列是汉明数问题的一个版本。参见 https://rosettacode.org/wiki/Hamming_numbers如何做到这一点。对于 10^100,这个序列中仍然只有数万个 - 它在控制之中。
关于比率的第二个问题,您需要利用以下两个事实。事实 1 是您仅通过减法就知道 2 和 5 的正确个数。第二个是,如果 m
与 10
互质,则 m * m^(4 * 10^(k-1) - 1)
是 1 mod 10^k
。所以你现在可以“除以”mod 10^k,并计算出答案中不涉及 2 或 5 的每个因子的最后几项,然后计算出 0 的个数,以及剩余因子的个数您拥有的 2 或 5 个。
这是一个重要的优化。如果你知道 f(n)
mod 2^8 和 5^8,那么不难弄清楚 mod 10^8。但是它的值 mod 这两个可以减少到适度大小的查找表。较大的你只需要将它存储为奇数 n 最多 4 * 390625,但其中少于 800k。 (那时你已经乘以不能被 5 mod 5^8 整除的事物组的所有元素,并且该产品是 1。然后模式重复。)如果你使用 4 字节整数,那是几 MB 查找可以很容易地预先计算的表格。
我可能应该解释为什么这个技巧有效,因为它并不明显而且我错了几次。诀窍是与 5^k 相对质数的数字形成一个组。意思是每个都有一个逆。所以如果你把它们全部相乘,然后重新排列,除了 5^k-1 之外,每个都有一个倒数。因此,乘以另一个副本,它们再次配对,包括那个讨厌的副本,结果为 1。现在对于我们的 f,我们只对不能被 5 整除的奇数感兴趣,但奇数不能被 5 整除到 2* 5^k 是 mod 5^k,只是将可被 5 整除的值重新排列为 5^k。我们需要 2 个副本,因此需要 4*5^k。但我们只需要赔率,因为紧随其后的偶数始终与前一个奇数具有相同的值。
根据请求,以下是单个示例的工作原理。我会做 15 的最后 3 位数字!
15! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15
= (1*3*7*9*11*13) * (2*6*14) * (4*12) * (5*15) * (8) * (10)
= (1*3*7*9*11*13) * 2^3*(1*3*7) * 2^4*(1*3) * 5^2*(1*3) * 2^3*(1) * 10*(1)
= 2^11 * 5^3 * f(15) * f(15/2) * f(15/4) * f(15/5) * f(15/8) * f(15/10)
= 2^11 * 5^3 * f(15) * f(15/2) * f(15/4) * f(15/5) * f(15/8) * f(15/10)
= 10^3 * 2^8 * f(15) * f(7) * f(3) * f(3) * f(1) * f(1)
Which leads to the calculation...
256 * 27 * 21 * 3 * 3 * 1 * 1 (mod 1000)
= 368 (mod 1000)
这是正确的,因为 15! = 1307674368000
。
关于algorithm - 一个非常大的阶乘的最后一个非零数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224037/
在 Windows 世界中,什么是正确的名称。具有导出函数的老式 C++ DLL?不是 COM DLL,也不是 .NET DLL。我们以前通过调用 LoadLibrary() 和 GetProcAdd
目前我正在使用javaEE7,我有一个场景如下。在我的 JSF Web 应用程序中,我有一个事件监听器(不是 JSF 事件),当事件调用时,它会执行某些操作,然后将这些信息更新到我的 Web 应用程序
这不是 AJAX 请求/响应回调问题... 我正在使用 Dojo 1.5 构建网格。我正在尝试 dojo.connect具有功能的扩展/收缩按钮。我的问题是 grid.startup()在创建实际 D
非 Webkit Opera 是 very specific在某些功能中,因此通常通过 JavaScript 检测到 the following way . 但是,Opera Next 几乎是 Goo
我已查看以下链接中给出的所有日志,但未能找到 IP 地址: https://developer.couchbase.com/documentation/server/3.x/admin/Misc/Tr
我有一个命令行程序,它根据一组源文件生成一个我想在我的 Android gradle 构建 (A) 中使用的 jar 文件。这个命令行程序只是将一个 jar 文件存储在磁盘上的一个目录中。 我如何创建
下面的 htaccess 命令将所有非 www 转移到 http www RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^
我正在使用自定义链接器脚本将内核镜像分为两部分。第一个是普通代码和数据,第二个是初始化代码和不再需要时将被丢弃的数据。初始化部分也不像内核本身那样在地址空间之间共享,因此如果 fork() 仍然存在(
这个问题在这里已经有了答案: Several unary operators in C and C++ (3 个答案) What is the "-->" operator in C++? (29
假设我有一个类设置如下: class A { public: virtual void foo() { printf("default implementation\n"); } }; c
#include using namespace std; int main(int argc, char *argv[]) { int i=-5; while(~(i)) {
近期,百度搜索引擎变化无常,很多企业站、行业站、门户站、论坛等站点遭到了降权,特别是比比贴分类信息网直接遭到了拔毛,这对于广大站长来说是一种打击,也是各个企业、行业的打击。 至今,很多网站已经恢复
我现在正在使用 IBM TPM v1332 + IBM TSS v1470 并尝试将一些基本关键字/密码存储到 TPM 上的非 volatile 内存中。我找到了两种方法。一种是创建一个密封对象并使用
我的 PHP 脚本中有一个正则表达式,如下所示: /(\b$term|$term\b)(?!([^)/iu 这与 $term 中包含的单词匹配,只要前后有单词边界并且它不在 HTML 标记内即可。 但
我想显示用户名称地址(请参阅 www.ipchicken.com ),但我唯一能找到的是 IP 地址。我尝试了反向查找,但也没有用: IPAddress ip = IPAddress.Parse(th
只有 UI 线程能够显示到屏幕上,还是其他线程也可以这样做? 最佳答案 不,您只能直接从 UI 线程访问 UI,但您可以编码来自其他线程的结果,例如使用 Control.Invoke 或 contro
我正在使用现代 Excel 滚动条(不是旧的 ActiveX 类型,即开发人员 > 插入 > 表单控件 > 滚动条)并且想检测它的值何时更改。我找不到有关此类对象的更改事件的任何信息。您可以在单击时分
当我使用这段代码时 IE 6 确实正确使用了指定的样式表,但所有其他浏览器在应该使用基本上声明的样式表时会忽略这两种样式表,如果您不是 IE,请使用此样式表。 有什么想法吗? 最佳答案 n
我想指定 2 mssql 表之间的关系。 付款类别和付款。 paymentcategory.id 加入 payout.category 列。 在 payout.json 模型中 我指定为外键:id,
我正在尝试制作非 volatile UDF,但似乎不可能。因此,这是我非常简单的test-UDF: Option Explicit Dim i As Integer Sub Main() i = 0
我是一名优秀的程序员,十分优秀!