- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(请参阅下面的解决方案)
(潜伏者出现)
我正在使用 BigDecimal/BigInteger 类来处理非常大的数字。
我有一个计算复合增长系列的公式。
对于每个 n,值 = 初始 * (coef ^ n)。
我正在尝试找到一种快速方法来计算 n0 和 n1 之间的值子集的总和。
例如,n0 = 4 且 n1 = 6,
返回:初始 * (coef ^ 4) + 初始 * (coef ^ 5) + 初始 * (coef ^ 6)
我不太了解数学,但也许有一种公式化的方式来表达这一点?
我基本上将所有值相加,通过提高系数将其中一些值聚集成 10 的幂。
据我所知,该函数是准确的。我可以返回一个值
n0 = 1,n1 = 50000,初始 = 100,coef = 1.05 不到一秒。
虽然我可能永远不会使用该函数来处理高于 ~20,000 的值,但很高兴知道是否有更有效的方法来实现这一点。
public static final BigDecimal sum(int n0, int n1, BigDecimal initial, BigDecimal coef) {
BigDecimal sum = BigDecimal.ZERO;
int short_cut = 1000000000;
//Loop for each power of 10
while (short_cut >= 10) {
//Check the range of n is greater than the power of 10
if (n1 - n0 >= short_cut) {
//Calculate the coefficient * the power of 10
BigDecimal xCoef = coef.pow(short_cut);
//Add the first sum of values for n by re-calling the function for n0 to n0 + shortcut - 1
BigDecimal add = sum(n0, n0 + short_cut - 1, initial, coef);
sum = sum.add(add);
//Move n forward by the power of 10
n0 += short_cut;
while (n1 - n0 >= short_cut) {
//While the range is still less than the current power of 10
//Continue to add the next sum multiplied by the coefficient
add = add.multiply(xCoef);
sum = sum.add(add);
//Move n forward
n0 += short_cut;
}
}
//Move to the next smallest power of 10
short_cut /= 10;
}
//Finish adding where n is smaller than 10
for (; n0 <= n1; n0++)
sum = sum.add(initial.multiply(coef.pow(n0)));
return sum;
}
下一个问题是计算 n1 的最大值,其中 sum(n0, initial, coef) <= x。
编辑:
public static final BigDecimal sum(int n0, int n1, BigDecimal initial, BigDecimal coef) {
return initial.multiply(coef.pow(n0).subtract(coef.pow(n1 + 1))).divide(BigDecimal.ONE.subtract(coef));
}
(初始 * coef ^ n0 - coef ^ n1 + 1)/1 - coef
感谢维基百科。
最佳答案
我会写一些算法的想法。
首先让我们简化您的公式:
所以你应该计算:S = a * (c ^ n0) + a * (c ^ (n0+1)) +...+ a * (c ^ n1)其中initial = a和coef = c
令S(n)为以下总和的函数:S(n) = a + a * c + a * (c^2) +...+ a * (c ^ n)
我们将得到S = S(n1)-S(n0-1)
另一方面,S(n) 是 geometric progression 的总和。 ,因此S(n)=a * (1-c^n)/(1-c)。
所以我们会得到S = S(n1)-S(n0-1)=a*(1-c^n1)/(1-c)-a*(1-c^(n0-) 1))/(1-c)=a*(c^(n0-1)-c^n1)/(1-c)。
所以现在我们必须处理计算c^n指数(当然BigDecimal类有pow方法,我们这样做只是为了能够计算算法的复杂度)。以下算法的复杂度为O(log(n)):
function exp(c,n){
// throw exception when n is not an natural number or 0
if(n == 0){
return 1;
}
m = exp(c, floor(n/2));
if (n % 2 == 0){
return m*m;
} else{
return m*m*c;
}
}
因此,如果我们考虑到代数运算具有 O(1) 复杂度,我们可以得出结论,可以以 O(log(n)) 复杂度计算总和> 复杂性。
关于java - 计算指数增长系列中的值之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36991866/
这个问题可能类似于In Angular2 *ngFor iteration, how do I output only unique values from the array?但我的问题是还有更多功
我编写了一个算法来获取 float 的总和,该算法对于整数来说非常有效,但是当我应用于 float 时,我得到的总和是负数。但是我的 float 数组只有正 float 。在这里我发布我的代码,感谢您
我想将这个简单的 for 循环转换为并行循环。它遍历字符串数组(从文本文件读取的 float )并计算总和。 for (int i = 0; i { float tmp; if (f
我正在尝试总结日期差异,一切都很好,除了如果有相同日期我想添加 1,例如,如果起始日期是:01/01/2003到目前为止是 01/01/2003 那么我想添加 1 天,但它没有添加 1 天,而是仅在
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Is JavaScript’s Floating-Point Math Broken? 这将是一个非常基本的计算机科
我刚接触sql,卡住了。我正在尝试计算每个用户走过的(每年)距离总和。我有一个具有以下结构的表(我们称之为 dist_table): rowid user_name date
我刚接触sql,卡住了。我正在尝试计算每个用户走过的(每年)距离总和。我有一个具有以下结构的表(我们称之为 dist_table): rowid user_name date
给定一个正数数组。我想将数组拆分为 2 个不同的子集,以使它们的 gcd(最大公约数)之和最大。 示例数组:{6,7,6,7}。 答案:需要的两个子集是:{6,6}和{7,7};它们各自的 gcd(s
我想在我的数组中求和:
我想将下面的字符串拆分为字母和数字,然后我需要计算数字的总和。我的示例问题是 a[20]={"abcd123dc2"}; 预期输出: abcddc 8 我的代码: int main() { c
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
为什么 sizeof 运算符返回的结构大小大于该结构成员的总大小? 最佳答案 这是因为添加了填充以满足对齐约束。 Data structure alignment影响程序的性能和正确性: 未对齐的访问
我是一名优秀的程序员,十分优秀!