回 帖 发 新 帖 刷新版面

主题:斐波拉契数列

各位大虾,小弟在此,急求斐波拉契数列如何用高精度算法做,一定加分!!!!![em10]

回复列表 (共10个回复)

沙发

用字符串做的,到1220位
在我的机器上运行100次12.2秒
  function jia(n1,n2:string):string;
    var
      n3:string;
      i:byte;
  begin
    n3:='';
{-1-}if length(n1)<length(n2)
       then for i:=1 to length(n2)-length(n1) do insert('0',n1,1)
       else for i:=1 to length(n1)-length(n2) do insert('0',n2,1);
{-2-}for i:=length(n1) downto 1 do insert(chr(ord(n1[i])+ord(n2[i])-48),n3,1);
{-3-}for i:=length(n1) downto 1 do
       if n3[i]>'9' then begin
         if i=1 then insert('1',n3,1)
                else n3[i-1]:=succ(n3[i-1])
       end;
{-4-}for i:=1 to length(n3) do if n3[i]>'9' then n3[i]:=chr(ord(n3[i])-10);
{-5-}jia:=n3;
  end;
  var
    a,b,c:string;
    i:word;
begin
  assign(output,'fbnc.txt');rewrite(output);
  a:='0';b:='1';
  writeln('1');
  for i:=1 to 1220 do begin
    c:=jia(a,b);
    a:=b;b:=c;
    writeln(i,':',b,' ',length(b));
  end;
  close(output);
end.

板凳

非要用高精度算法吗?我有一般算法的!用吗??????????、

3 楼

- -斐波拉契就是递推吧 - -
把加法换成高精度加法就OVER了  - -

4 楼

请问是前几项?
……

5 楼

教科书上有的……

6 楼

Program wx; 
 var 
 a,b,n,i:integer; 
 begin 
 readln(n); 
 a:=0; 
 b:=1; 
 writeln(a); writeln(b); 
 for i:=1 to n-2 do 
 begin 
 a:=a+b; 
 b:=b+a; 
end; 
writeln(a); 
end. 

7 楼

你用公式:
begin 
a:=a+b;
b:=b+a;
end;
write(a:5,b:5);

8 楼

用线性规划可以把时间复杂度降到O(lgn)

9 楼

可以用公式嘛。
an=((sqrt(5)-1)^n+(sqrt(5)+1)^n)/sqrt(5)

10 楼

var n,i:qword;
a:array[1..100000] of qword;
begin
  a[1]:=1;a[2]:=2;
  for i:=3 to n do
    a[i]:=a[i-1]+a[i-2];
  writeln(a[i]);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册