c编程读入大于等于2的正整数n,然后进行数列求和:s

2021-01-11 09:13:02 字数 5288 阅读 9031

1楼:二到正无穷的梨

int n,a=0,i;

scanf……

for(i=1;i

a+=i/i+1;

printf……

数列求和 1+1/2+1/3+1/4+1/5+……1/n=? 急~

2楼:你爱我妈呀

利用“欧拉公式:1+1/2+1/3+……+1/n=ln(n)+c,c为欧拉常数数值是0.5772……

则1+1/2+1/3+1/4+...+1/2007+1/2008=ln(2008)+c=8.1821(约)

就不出具体数字的,如果n=100 那还可以求的 。然而这个n趋近于无穷 ,所以算不出的。

它是实数,所以它不是有理数就是无理数,而上两层的人说“谈不上到底是无理数还是有理数”的说法显然是错误的。而根据种种依据可判断它是无理数。

具体证明过程如下:

首先我们可以知道实数包括有理数和无理数,而有理数又包括有限小数和无限循环小数,有理数都可以划成两个有限互质整数相除的形式(整数除外)。而1+1/2+1/3+1/4+1/5+...+1/n (n为无限大)通分以后的分子和分母都是无穷大,不是有限整数,且不能约分,所以它不属于有理数,因此它是无理数。

而1+1/2+1/3+1/4+1/5+...+1/n (n为无限大)不存在循环节,不可能根据等比数列知识划成两个互质整数相除的形式。所以它终究是无理数。

这是有名的调和级数,是高数中的东西。这题目用n!

当n->∞,1+1/2+1/3+1/4+1/5+...+1/n->∞,是个发散级数

当n很大时,有个近似公式:1+1/2+1/3+1/4+1/5+...+1/n=γ+ln(n)

γ是欧拉常数,γ=0.57721566490153286060651209...

ln(n)是n的自然对数(即以e为底的对数,e=2.71828...)

由于ln(1+1/n)ln(1+1)+ln(1+1/2)+ln(1+1/3)+…+ln(1+1/n)

=ln2+ln(3/2)+ln(4/3)+…+ln[(n+1)/n]

=ln[2*3/2*4/3*…*(n+1)/n]=ln(n+1)

由于lim sn(n→∞)≥lim ln(n+1)(n→∞)=+∞

所以sn的极限不存在,调和级数发散。

但极限s=lim[1+1/2+1/3+…+1/n-ln(n)](n→∞)却存在,因为

sn=1+1/2+1/3+…+1/n-ln(n)>ln(1+1)+ln(1+1/2)+ln(1+1/3)+…+ln(1+1/n)-ln(n)

=ln(n+1)-ln(n)=ln(1+1/n)

由于lim sn(n→∞)≥lim ln(1+1/n)(n→∞)=0

因此sn有下界

而sn-s(n+1)=1+1/2+1/3+…+1/n-ln(n)-[1+1/2+1/3+…+1/(n+1)-ln(n+1)]

=ln(n+1)-ln(n)-1/(n+1)=ln(1+1/n)-1/(n+1)>ln(1+1/n)-1/n>0

所以sn单调递减。由单调有界数列极限定理,可知sn必有极限,因此

s=lim[1+1/2+1/3+…+1/n-ln(n)](n→∞)存在。

3楼:凌吟佳

当n很大时,有:1+1/2+1/3+1/4+1/5+1/6+...1/n = 0.57721566490153286060651209 + ln(n)//c++里面

用log(n),pascal里面用ln(n)

0.57721566490153286060651209叫做欧拉常数

to gxq:

假设;s(n)=1+1/2+1/3+1/4+..1/n

当 n很大时 sqrt(n+1)

= sqrt(n*(1+1/n))

= sqrt(n)*sqrt(1+1/2n)

≈ sqrt(n)*(1+ 1/(2n))

= sqrt(n)+ 1/(2*sqrt(n))

设 s(n)=sqrt(n),

因为:1/(n+1)<1/(2*sqrt(n))

所以:s(n+1)=s(n)+1/(n+1)< s(n)+1/(2*sqrt(n))

即求得s(n)的上限

1+1/2+1/3+…+1/n是没有好的计算公式的,所有计算公式都是计算近似值的,且精确度不高。

自然数的倒数组成的数列,称为调和数列.人们已经研究它几百年了.但是迄今为止没有能得到它的求和公式只是得到它的近似公式(当n很大时):

1+1/2+1/3+......+1/n≈lnn+c(c=0.57722......一个无理数,称作欧拉初始,专为调和级数所用)

人们倾向于认为它没有一个简洁的求和公式.

但是,不是因为它是发散的,才没有求和公式.相反的,例如等差数列是发散的,公比的绝对值大于1的等比数列也是发散的,它们都有求和公式.

4楼:吹雪_西门

我不太清楚,但我尽量帮你提供资料

(一)分解法

问题二:求正整数n和m之间具有最多真因子的数.本题中的真因子是这

样定义的:如果r数1,我们认为1是1的真因子.

参数范围:1≤n时限:10s.

我们很容易得到下列两个方法:

顺序查找法.....:依次统计规定范围内的各整数的真因子个数,记录

最优解.

由于,分解质因数的算法时间复杂度为平方根级的,因此这个算法的时间

复杂度为o((m-n)*m0.5).

标号法...:枚举不同的因数,标记它们的倍数.

如果不仔细分析,会认为两种方法的算法时间复杂度一样,实际上后者的

时间复杂度是0((m-n)*(1+1/2+1/3…+1/[m0.5])),还不到o((m-n)*[log2m0.5])

.证明如下:

先用数学归纳法证明1+1/2+1/3+1/4+1/5+…+1/(2n-1)≤n.

当n=1时,左边=1,右边=n=1;1≤1,不等式成立.

假设当n=k时,不等式成立,则有

1+1/2+1/3+1/4+1/5+…+1/2k-1≤k

现证明n=k+1时,不等式依然成立,

∵ 1/2k+1/(2k+1)+1/(2k+2)+…+1/(2k+1-1)<1/2k+1/2k+…+1/2k

=(2k+1-1-2k+1)/2k

=1 ∴ 1+1/2+1/3+…+1/2k-1+1/2k+1/(2k+1)+…+1/(2k+1-1)≤k+1

即 1+1/2+1/3+1/4+1/5+…+1/2k+1-1≤k+1

故命题成立.

所以,1+1/2+1/3+1/4+1/5+…+1/n≤[log2n]

方法二之所以在时间复杂度上大有降低,是因为它采用了"空间换时间"

规模化问题的解题策略 长沙市一中●谢婧

的模式,由于在标号的全过程中必须保存当前各整数的真因子个数,因此空间

复杂度是0(m-n),从参数范围可知,实际情况下无法满足这一需求.它仅仅停

留在理论基础上,无法用程序实现.方法一虽然空间耗费小,具有可行性,但

时间耗费却难以满足要求.于是我们得到:

分段统计法.....:将给定区间分成不重复且不遗漏的若干个子区间,

然后按方法二统计.

由于方法一每次处理单一元素,因此时间耗费高,方法二将所有元素统一

处理,因此空间需求大,而方法三则综合前两种方法的优点,在充分利用空间

的情况下,得到较高的时间效率.

方法三实质就是分解法的应用,由此我们将"分解法"定义如下:

以一定的算法为原型,将大规模的问题分解成若干个不遗漏且尽量不重复

的相对独立的子问题,使得所有子问题解集的全集就是原问题的解集.

分解法的原理和适用范围:

解决某些纵向扩展问题的时候,常常会出现理论需求与实际承受能力之间

的"矛盾",它主要体现在时空需求互相制约的关系上.如本题中的时空关系可

以用下图所示的曲线(双曲线的某一支的一部分)来表示,其中曲线的两个端

点分别代表方法一与方法二的时空需求.这时若把问题分解成若干规模较小的

子问题,套用原有的算法解决,就能有效地中和时空需求的矛盾.通常,我们

以实际空间承受能力作为划分子问题的规模标准,这样才能令时间效率得到最

大提高.下图中,虚线位置表示实际空间承受能力的上限,它与曲线的交点就

是时空需求分配的最优方案.

5楼:匿名用户

令 s(n) = 1+1/2+1/3+1/4+1/5+1/6+...1/n,

则 s(∞) = 1 + (1/2+1/3) + (1/4+1/5+1/6+1/7) + ...

< 1 + (1/2+1/2) + (1/4+1/4+1/4+1/4) + ...

且 s(∞) = 1 + 1/2 +(1/3+1/4) + (1/5+1/6+1/7+1/8) + ...

> 1 + 1/2 +(1/4+1/4) + (1/8+1/8+1/8+1/8) + ...

可推证:1 + k/2 < s(n) < 1 + k,其中 k = log(ln)/log(2),n>2

从上式,可看出s(n)不收敛。

我不知道楼主是如何得到 sqrt(n) 上限的,

但可以肯定上式在更接近s(n)上限(当n>40时)。

看到这个问题,首先想到是叫“欧拉常数”的东西,但在网上遍寻不到,

而后决定用不等式,但如果对整体处理,误差非常大,

所以,我决定分段处理,不想居然成功了!

6楼:匿名用户

简单,就是欧拉常数0.57721566490153286060651209+log(n)

1*2+2*3+3*4+4*5+5*6+6*7+.........n*(n+1)如何求和?

7楼:你爱我妈呀

解法一:

1×2+2×3+3×4+...+n(n+1)=×[1×2×3-0×1×2+2×3×4-1×2×3+3×4×5-2×3×4+...+n(n+1)(n+2)-(n-1)n(n+1)]

=n(n+1)(n+2)

解法二:

考察一般项第k项,k(k+1)=k+k

1×2+2×3+3×4+...+n(n+1)=(1+2+3+...+n)+(1+2+3+...

+n)=n(n+1)(2n+1)/6 +n(n+1)/2=[n(n+1)/6](2n+1+3)

=n(n+1)(2n+4)/6

=n(n+1)(n+2)

c语言编写程序输入正整数n计算,c语言编写程序,输入一个正整数n,计算1+(1/3)+(1/5)+...的前n项之和。求过程

1楼 匿名用户 include int main for i 1 i n i printf sum 3f n sum return 0 示例运行结果 20sum 2 480 2楼 匿名用户 include int main void for int i 0 i printf 数列前 d 项之和为 g...

c语言作业编写程序读入数字字符,C语言作业:编写一个程序,读入一个数字字符0——9,将其转换为相应的整数后显示出来 求大神解答啊

1楼 匿名用户 你好,程序如下 include void main 有疑问提出望采纳 2楼 匿名用户 如下 include int main 3楼 匿名用户 include int main c语言作业 编写一个程序,读入一个数字字符0 9,将其转换为相应的整数后显示出来 4楼 include vo...