gpt4 book ai didi

algorithm - 数字大于 maxint 的可靠乘法和模数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:50 34 4
gpt4 key购买 nike

情况
在处理 coding kata 之后我终于得到了适用于我的小测试用例的算法。
才发现它没有大规模工作,时间不是问题,但数字的大小是问题。
在其中一个测试用例的计算中,我需要执行以下计算。

var numberOfColumns = 34359738368;
var numberOfRows = 28827050410;
var valueOverflow = 13719506;
var totalOfSingleRow = (numberOfColumns * (numberOfColumns - 1))/2;
var totalGridValue = totalOfSingleRow * numberOfRows;
var result = (totalOfSingleRow * totalGridValue) % valueOverflow;

因为顶行是连续的,我可以通过执行 (numberOfColumns * (numberOfColumns - 1))/2; 来计算第一行的总和。
然后我需要将该答案乘以行数并应用模数以获得我的结果值。

问题
问题是 Javascript 只能计算小于 9007199254740991 的数字。
只有上面的计算导致 totalGridValue17016487081526963049249353236480
您可以想象我的计算不会产生所需的值 10552574,因为该值被截断为 1.7016487081526963e+31。
这导致 8479672

的值错误

问题
我怎样才能改变我的计算,使结果成为所需的 10552574
我已经尝试在 numberOfColumns 上更快地应用模运算符,但没有得到想要的结果。
我也考虑过将两个大值添加为字符串,但这个过程会变得很慢,因为我必须多次添加两个字符串。

注意
因为我需要在 codewars 上提交这个,所以我不能使用任何外部库!
虽然我可以使用其他语言,但我知道它在 javascript 中是可能的。

最佳答案

我认为您将模运算进一步向上移动到正确的轨道上,但我不会为此使用模运算符。相反,使用常规的浮点除法,并将该值进行到最后一步,当所有其他计算完成后,然后将该 float 的小数部分转换为整数。基本上,对于纯除法,您只是在对值进行转换,而不是改变值。一旦你进入模数,你就改变了值(value)。 (我还会更改 totalSingleRow 公式以除以大值然后乘以结果,而不是先乘后除。)

关于algorithm - 数字大于 maxint 的可靠乘法和模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48462395/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com