C语言的Cantor的数列,这个公式是怎么来的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的Cantor的数列,这个公式是怎么来的?相关的知识,希望对你有一定的参考价值。
if(k%2==0) printf("%d/%d ",k-s+n,s-n+1); break;
if(k%2==1) printf("%d/%d ",s-n+1,k-s+n); break;
这里的“k-s+n”和"s-n+1"是怎么得到的?
1/1 1/2 1/3 1/4 1/5 …
2/1 2/2 2/3 2/4 …
3/1 3/2 3/3 …
4/1 4/2 …
5/1 …
…
我们以Z字形给上表的每一项编号。
第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入格式 Input Format
输入:整数N(1≤N≤10000000)
输出格式 Output Format
输出:表中的第N项
Tip:纯粹的数学问题,第K个斜行("/"方向)上每个分数的分子分母之和为K+1,因此先算出第N项所在的斜行K,然后看斜行是奇数项还是偶数项,进而算出具体分数值。
#include <stdio.h>
int main()
long i=0,n;
scanf("%ld",&n);
while (i<n)
n-=i;
i++;
if (i%2==0) printf("%d/%d",n,i+1-n);
else printf("%d/%d",i+1-n,n);
system("pause");
return 0;
追问
我是想问那两个算式是怎么推理出来的,而不是程序!
追答第K个斜行("/"方向)上每个分数的分子分母之和为K+1,因此先算出第N项所在的斜行K,然后看斜行是奇数项还是偶数项,进而算出具体分数值。
while (i<n)
n-=i;
i++;
这个循环可以算出第N个数应该是在第i个斜行。通过几次循环n-=i,最终n可能还有剩余,我们所要求的第N个数,就是第i个斜行的第n个数。
之后只要判断i是偶数行还是奇数行。
如果是偶数行,n正好等于分子;如果是奇数行,n正好等于分母。
根据分子分母之和为i+1,分数值就出来了。
这是我发的程序的思路。但是每个人有每个人的想法。可能你的程序思路不同,所以写出来有点不一样。
最好可以把这个程序发出来,才能很清楚的知道完整流程。你的k,s,n分别代表什么其实只看你这两个语句,我猜不出来。不好意思。
斐波那契数列的公式是啥?
简单一点,小学生看得懂的。
这个数列是由13世纪意大利斐波那契提出的的,故叫斐波那契数列。该数列由下面的递推关系决定:F0=0,F1=1
Fn+2=Fn + Fn+1(n>=0)
它的通项公式是 Fn=1/根号5[(1+根号5)/2]的n次方-[(1-根号5)/2]的n次方(n属于正整数)
补充问题:
菲波那契数列指的是这样一个数列:
1,1,2,3,5,8,13,21……
这个数列从第三项开始,每一项都等于前两项之和
它的通项公式为:[(1+√5)/2]^n /√5 - [(1-√5)/2]^n /√5 【√5表示根号5】
很有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。
该数列有很多奇妙的属性
比如:随着数列项数的增加,前一项与后一项之比越逼近黄金分割0.6180339887……
还有一项性质,从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1
如果你看到有这样一个题目:某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了菲波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到
如果任意挑两个数为起始,比如5、-2.4,然后两项两项地相加下去,形成5、-2.4、2.6、0.2、2.8、3、5.8、8.8、14.6……等,你将发现随着数列的发展,前后两项之比也越来越逼近黄金分割,且某一项的平方与前后两项之积的差值也交替相差某个值
仅供参考。 参考技术A 1,2,5,8
就是第一个数+第二个数=第三个数,第二个数+第三个数=第四个数……以此类推追问
那要你算到第2013个数呢?
参考技术B 回答这个数列是由13世纪意大利斐波那契提出的的,故叫斐波那契数列。该数列由下面的递推关系决定:F0=0,F1=1Fn+2=Fn + Fn+1(n>=0)它的通项公式是 Fn=1/根号5[(1+根号5)/2]的n次方-[(1-根号5)/2]的n次方(n属于正整数)
参考技术C 1+2+3+5+8+13追问看不懂
追答1+1+2+3+5+8+13 每一项都等于前两项之和
参考技术D 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...特别指出:0是第0项,不是第1项。这个数列从第二项开始,每一项都等于前两项之和。追问那要你算到第2013个数呢?
以上是关于C语言的Cantor的数列,这个公式是怎么来的?的主要内容,如果未能解决你的问题,请参考以下文章
C语言求等比数列2的0次方,2的1次方,2的2次方,...,2的63次方前64项的和。