对于给定的正整数你,求解1+(1+2)+(1+2+3)+…+(1+2+3+…n), n>2,例如n=10000。使用一重循环n*(n+1)\2和2重循环两种方式的解法,对于相同的n,给出两种解法的求和结果和求解时间,并用相关数据进行测试。用c语言来写
时间: 2024-09-22 12:07:02 浏览: 65
各位相加(递归求解+数学规律-树根)1
首先,我们来介绍如何使用C语言编写这两种方式的程序:
1. **一重循环(n*(n+1)/2)求和**:
```c
#include <stdio.h>
long long sum_by_loop(int n) {
long long total = (n * (n + 1)) / 2;
return total;
}
int main() {
int n = 10000;
long long result = sum_by_loop(n);
printf("Using single loop, the sum is: %lld\n", result);
// 对于较大的n值,理论上单次计算的时间复杂度是O(1),因为常数时间内完成求和
// 但是实际运行会受到CPU缓存等硬件因素影响,这里无法直接测量时间
}
```
2. **二重循环(累加每个子序列和)求和**:
```c
#include <stdio.h>
long long sum_by_two_loops(int n) {
long long total = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= i; ++j) {
total += j;
}
}
return total;
}
int main() {
int n = 10000;
long long result = sum_by_two_loops(n);
printf("Using double loop, the sum is: %lld\n", result);
// 由于二重循环,时间复杂度为O(n^2),当n增大时,求和所需时间显著增长
// 测试时间可以根据实际情况运行并记录,如printf("Time taken: %f seconds\n", ...);
}
```
对于相同的大数值 `n`,通常一重循环的方式更高效,因为它的时间复杂度较低。但在演示代码中,我们无法直接测量运行时间,只能说明理论上的效率差异。
测试时,你可以将 `n` 设置为不同的值,比如从几百到几千,然后比较两种方法的运行时间。如果 `n` 很大,你会发现使用一重循环的方法速度更快。
阅读全文