[C/E] 等差数列求和

题目:要求给定一个整数 N,求从 0 到 N 之间所有整数相加之和。

解1:使用 for 循环依次递加。

#include <stdio.h>

int main(void){
    int x;
    printf("Input an integer:\n");
    scanf("%d", &x);
    printf("sum=%d\n", sum(x));
    return 0;
};

int sum(int x){
    int i, result=0;
    for(i=0; i<=x; i++){
        result+=i;
    }
    return result;
};

解2:题目所求实际上为一个首项为 0,末项为 N,公差为 1 的等差数列,根据等差求和公式:S[n] = N * (N + 1) / 2 或者 S[n] = (a[1] + a[n]) * n / 2。

#include <stdio.h>

int main(void){
    int x;
    printf("Input an integer:\n");
    scanf("%d", &x);
    printf("sum=%d\n", sum(x));
    return 0;
};

int sum(int x){
    return (x + 1)*x/2;
};

输入与输入:

$ ./a.out
Input an integer:
100
sum=5050

等差数列公式

an = a1 + (n - 1)d

Sn = na1 + n(n-1)d/2

n 表示数列长度。

a1 表示首项。

d 表示公差。

Sn 表示求 n 项之和。

[C/E] 等差数列求和

时间: 2024-08-09 00:29:49

[C/E] 等差数列求和的相关文章

等差数列求和模板

一直就没彻底搞清楚这个问题. 在这里总结下. 一.1+2+3+4+...+n 这个公式还是记得住的:n*(n+1)/2 (编程的时候顺序不能变) 二.起始项为a1,终止项为an,总共有n项 这时候分情况讨论 1. n%2 == 0 则输出 (a1+an)*(n/2) 2. n%2 == 1 定理:当n%2==1时,(a1+an)%2 == 0 证明: an = a1 + (n-1)*d a1+an = 2*a1+(n-1)*d 所以(a1+an)%2 == 0 有了这个定理,于是输出((a1+a

hdu2058 The sum problem(枚举~~等差数列求和公式)

The sum problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 17697    Accepted Submission(s): 5275 Problem Description Given a sequence 1,2,3,......N, your job is to calculate all the possibl

高斯求和等差数列前缀和(洛谷1147 连续自然数和)

对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解. 输入格式: 包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000). 输出格式: 每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一

洛谷 P1147 连续自然数和 Label:等差数列

题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解. 输入输出格式 输入格式: 包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000). 输出格式: 每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定

poj 2140 Herd Sums(等差数列)

题目链接:http://poj.org/problem?id=2140 题意:给出n,求一共有多少个连续的数满足加和恰好得到n, 思路:这题想了好久一开始以为是打表找规律,后来才发现与等差数列有关...(这题也可以用DP来做) 根据等差数列求和公式S=(a1+an)*n/2和末项公式an=a1+(n-1)*d(d位公差)得a1=(2*s+n-n*n)/2/n;得出求a1的公式然后对所有的n(n为项数)进行枚举,得出结果 2*s=(2*a1+n-1)*n,因为2*S必为偶数所以n为偶数或者(2*a

P2261 [CQOI2007]余数求和

题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 …… + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入输出样例 输入样例#1: 10 5 输出样例

luogu2261余数求和题解--整除分块

题目链接 https://www.luogu.org/problemnew/show/P2261 分析 显然\(k\) \(mod\) \(i=k-\lfloor {k/i}\rfloor\) \(\times\) \(i\),于是我们只需要求\(N * k-\sum_{i=1}^N {\lfloor {k/i}\rfloor\times i}\) 这里就需要数论分块,也称作整除分块的知识 结论: \(\forall{i} \in [x,\lfloor {k/{\lfloor {k/x}\rfl

题解 P2261 【[CQOI2007]余数求和】

题目链接 Solution [CQOI2007]余数求和 题目大意:给定\(n,k\),求\(\sum_{i = 1}^{n}k \bmod i\) 解析:我们考虑大力化柿子 \[\sum_{i = 1}^{n}k \bmod i\] \[=\sum_{i = 1}^{n}k-i \times \lfloor \frac{k}{i} \rfloor\] \[=nk-\sum_{i = 1}^{n}i \times\lfloor \frac{k}{i} \rfloor\] 然后我们发现右边\(\s

Codeforces #Round 785(Div.2)

假的div2 C题没事写什么公式被卡精度了,掉分了gg --------------------------------------------------- A....几个每个字符串预先给好一个代表的值,给n个字符串,求和. 题解:手速题. #include<iostream> #include<cstdio> #include<algorithm> #include<queue> #include<cstring> #include<m