Beudon01
Quách Văn Lượm | |
---|---|
Sinh | 1 tháng 1, 1981 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ệp | Giáo viên THPT Chuyên Bạc Liêu |
Tôn giáo | Khô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ửaGiả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ửaGiả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.