gpt4 book ai didi

c++ - 更快的谐波数?

转载 作者:行者123 更新时间:2023-11-30 01:42:42 26 4
gpt4 key购买 nike

我是编程初学者。我正在尝试制作一个程序,给定两个数字,它从另一个中减去一个谐波。 (输入:n, m/输出:Hn-Hm)

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main() {
double n1, n2, h1 = 0, h2 = 0, i; // n = number, h = harmonic
cin >> n1 >> n2;

if (n1 == 0) {
h1 = 0;
}
else {
for (i = 1; i <= n1; i++) {
h1 += 1 / i;
if (i <= n2) {
h2 += 1 / i;
}
}
}
cout << fixed << setprecision(10) << h1 - h2 << endl;

system("pause");
return 0;
}

该程序给出了正确的结果,但我正在使用我大学的网站,它说该程序很慢。我试图让它更快,但我无法弄清楚如何。谢谢。

最佳答案

您不需要计算完整的谐波数。假设 n1 < n2 ,这两个系列将是:

H(n1) = 1 + 1/2 + 1/3 + ... + 1/n1
H(n2) = 1 + 1/2 + 1/3 + ... + 1/n1 + 1/(n1+1) + 1(n1+2) + ... + 1/n2

所以当你减去 H(n2) - H(n1) , 第一个 n1两个级数中的项相互抵消,所以

H(n2) - H(n1) = 1/(n1+1) + 1(n1+2) + ... + 1/n2

如果n1 > n2结果是否定的。

double result = 0, mult = 1;
if (n1 > n2) {
double temp = n1;
n1 = n2;
n2 = temp;
mult = -1;
}
for (double denom = n1+1; denom <= n2; denom++) {
result += 1/denom;
}
result *= mult; // Flip the sign if we swapped n1 and n2
cout << fixed << setprecision(10) << result << endl;

关于c++ - 更快的谐波数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254516/

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