Thành viên:Beudon01

Bách khoa toàn thư mở Wikipedia
Quách Văn Lượm
Sinh1 tháng 1, 1981 (43 tuổi)
Bạc Liêu, Việt Nam
Trường lớpĐại học Cần Thơ: - Sư phạm Toán Tin - Thạc sĩ công nghệ thông tin
Nghề nghiệpGiáo viên THPT Chuyên Bạc Liêu
Tôn giáoKhông
Cha mẹQuách Văn Tỷ
Lê Thị Nhành
Trang web[Quách Văn Lượm]

Giải thuật Sàng số nguyên tố[sửa | sửa mã nguồn]

Giải thuật này của tác giả qvluom với độ phức tạp tính toán là O(n), các số chỉ duyệt qua đúng 1 lần. Thuật toán được thể hiện bằng ngôn ngữ lập trình Pascal (phiên bản free Pascal)

Const max=100;

Var

     a:array[1..max+1] of boolean;
     b,c:array[1..max+1] of longint;
     i:longint;

Procedure init;

var i:longint;

    begin
           for i:=1 to max+1 do
              begin
                  a[i]:=false; b[i]:=i; c[i]:=i;
              end;
          a[1]:=true;
    end;

Procedure check(i:longint);

    begin
          a[i]:= true; b[i]:= b[i+1];
          b[c[i]]:= b[i]; c[b[i]]:= c[i];
    end;

Function next(i:longint):longint;

    begin
          exit(b[i+1]);
    end;

Procedure fill;

var i,j,k:int64;

    begin
         i:=2;
         while i<=max do
             begin
                   j:=i;
                   while j <= max div i do
                         begin
                            k:=j;  k:=k*i;
                            while k<=max do   begin   check(k); k:=k*i;    end;
                            j:= next(j);
                        end;
                    i:=next(i);
                end;
      end;

Begin

      init;
      fill;
     {for i:=1 to max do
      if not a[i] then write(i,' ');
      readln;}

End.

Giải thuật qvluom tính giá trị của một biểu thức[sửa | sửa mã nguồn]

Giải thuật này do qvluom đề xuất vào khoảng năm 2002 và được công bố rộng rãi với cái tên rất lạ "Quắch Nguyễn". Tên chính xác là "Quách Nguyễn". Đây là giải thuật thiết kế khá ngắn gọn và dễ hiểu, làm việc rất tốt đối với các hàm số học một tham số. Code Pascal minh họa.

Function check(s:string):string;

Begin

 while pos('-',s)>0 do s[pos('-',s)]:='$';
 while pos('$',s)>0 do begin insert('+',s,pos('$',s)); s[pos('$',s)]:='-'; end;
 while pos('/',s)>0 do s[pos('/',s)]:='$';
 while pos('$',s)>0 do begin insert('*',s,pos('$',s)); s[pos('$',s)]:='/'; end;
 if s[1]='+' then delete(s,1,1);
 check:=s;

End;

Function value(s:string):real;

var r:real; c:word;

Begin

 if pos('+',s)<>0 then
   value:= value(copy(s,1,pos('+',s)-1))+ value(copy(s,pos('+',s)+1, length(s)-pos('+',s))) 
 else if pos('*',s)<>0 then
   value:= value(copy(s,1,pos('*',s)-1))* value(copy(s,pos('*',s)+1, length(s)-pos('*',s))) 
 else begin
        val(s,r,c);
        if c<>0 then
          if s[1]='-' then r:=-value(copy(s,2,length(s)-1)) else
             case upcase(s[c]) of
                 '/': r:=1/value(copy(s,2,length(s)-1));
                 'L': r:=ln(value(copy(s,3,length(s)-2)));
             end;
        value:=r;
       end;

End;

Begin

   write(value(check('1+6/2*3-ln10')):0:3);
   readln;

End.

Code này tính được giá trị của hàm Ln; các phép toán +, -, *, /. Việc bổ sung các hàm sin, cos, tan, ... là việc vô cùng đơn giản.