Thuật toán tìm số nguyên tố trong pascal năm 2024
Bài toán kiểm tra một số có phải là số nguyên tố không là một bài toán hết sức cơ bản khi bạn học bất kì một ngôn ngữ lập trình nào, trong bài viết này mình chia sẻ với các bạn thuật toán kiểm tra số nguyên tố trong pascal đơn giản và dễ hiểu nhất, nó không phải là thuật toán tối ưu nhưng dễ hiểu và phù hợp với đối tượng học sinh THCS dưới đây hãy tham khảo với onthihsg để có cách tìm số nguyên tố. Show Nội dung bài toán kiểm tra số nguyên tố trong pascalViết chương trình kiểm tra một số n (n <2 tỉ) có phải là số nguyên tố hay không. Hướng dẫn Hàm kiểm tra số nguyên tố : Dữ liệu vào file: nguyento.inp Dữ liệu ra file: nguyento.out Chứa số n Yes (No) Ý tưởng của thuật toán: Kiểm tra đúng như định nghĩa số nguyên tố, ta chỉ cần xem số đó có lớn hơn 1 không và có bao nhiêu ước, nếu chỉ có hai ước thì là số nguyên tố còn ngược lại thì không phải. Thuật toán tìm số nguyên tốChương trình viết hàm kiểm tra số nguyên tố viết bằng Free pascalprogram kiem_tra_nguyen_to; var m:longint;f:text; {-- chuong trinh con kiem tra so nguyen to } function ngto(n:longint):boolean; var i:longint; begin if n<2 then ngto:=false else ngto:=true; for i:=2 to trunc(sqrt(n)) do if n mod i = 0 then end;
{- het CT con----}
{Than chuong trinh chinh --}
begin
{Doc file }
assign(f,'nguyento.inp'); reset(f);
readln(f,m);close(f);
{Mo file de ghi}
assign(f,'nguyento.out'); rewrite(f);
if ngto(m) then write(f,'yes')
else write(f,'no');
close(f);
end.
Hầu hết những chương trình mà mình viết đều sử dụng chương trình con, theo mình nên tập cho học sinh thói quen như vậy ngay từ những bài tập đầu tiên.Bạn cũng có thể tham khảo chương trình kiểm tra số nguyên tố trong Scratch Sau khi học sinh nắm được thuật toán kiểm tra số nguyên tố ta có thể phát triển thêm một số bài toán liên quan như sau: Một số bài toán về số nguyên tốBài 1.1. Viết chương trình nhập vào một số n, xuất ra những số nguyên tố nhỏ hơn hoặc bằng n và tổng của tất cả những số nguyên tố đó. Dữ liệu vào file: Sum_nt.inp Dữ liệu ra file: Sum_nt.out Chứa số n – Dòng 1: chứa các số nguyên tố <=n cách nhau 1 khoảng trắng – Dòng 2: Chứa tổng các số nguyên tố trên Bài tập trên mình yêu cầu học sinh sử dụng chương trình co để giải quyết qua đó rèn luyện cho học sinh tư duy kế thừa Ý tưởng của thuật toán:
program Dem_nguyen_to; var m,k,s:longint;f:text; {-- chuong trinh con kiem tra so nguyen to } function ngto(n:longint):boolean; var i:longint; begin if n<2 then ngto:=false else ngto:=true; for i:=2 to trunc(sqrt(n)) do if n mod i = 0 then end;
{- het CT con----}
{Than chuong trinh chinh --}
begin
{Doc file }
assign(f,'sum_nt.inp'); reset(f);
read(f,m);close(f);
{Mo file de ghi}
assign(f,'sum_nt.out'); rewrite(f);
k:=1; S:=0;
while k<=m do writeln(f);
write(f,S);
close(f);
end.
Bài 1.2. Viết chương trình phân tích một số tự nhiên n (n <2 tỉ) ra thừa số nguyên tố.Dữ liệu vào file: pt_nt.inp Dữ liệu ra file: pt_nt.out Chứa số n VD: 100 1 dòng: chứa kết quả VD: 2.2.5.5 Đối với bài toán này ta chia số đó (nếu chia hết) cho số nguyên tố (duyệt từ số nguyên tố nhỏ đến lớn). Kiểm tra xem một số n có phải là số nguyên tố hay không vốn là một bài toán đơn giản chúng ta đều tiếp xúc từ khi mới bập bẹ những bài toán lập trình đầu tiên. Tuy nhiên, để đáp ứng những nhu cầu lớn lao của các ngành khoa học máy tính hiện nay như cryptography - mật mã hóa, những thuật toán kiểm tra số nguyên tố cần phải vượt xa giới hạn 32 bit nhỏ nhoi mà bình thường chúng ta hay sử dụng. Hôm nay chúng ta sẽ phân tích những thuật toán nền tảng để kiểm tra số nguyên tố - từ "thô sơ" đến "hiện đại"! 1. Thuật toán kiểm tra nguyên tố là gì?Thuật toán kiểm tra nguyên tố là những thuật toán để kiểm tra xem một số Hầu hết những thuật toán kiểm tra nguyên tố sẽ chứng minh số 2. Những kiểm tra đơn giảnDựa vào định nghĩa của số nguyên tố (là số chỉ chia hết cho 1 và chính nó), ta sẽ có được thuật toán kiểm nguyên tố đơn giản nhất: Kiểm tra các số từ 2 đến Độ phức tạp thời gian (ĐPT) của thuật toán trên là Tuy nhiên, giống như thuật toán đếm số ước của Kiểm tra các số từ 2 đến ĐPT: `n`3 Tuy nhiên, chúng ta còn có thể phát triển tiếp thuật toán trên bằng cách chứng minh Để ý rằng tất cả những số nguyên tố lớn hơn 3 đều có dạng `n`5 (vì `n`6 là những số chẵn; `n`7 chia hết cho 3). Vậy phương pháp kiểm tra lúc này sẽ là: Kiểm tra các số có dạng
Để ý rằng chúng ta bắt đầu vòng lặp từ ĐPT: `n - 1`2 (cũng là `n`3, nhưng nhanh hơn vài mili giây) Bây giờ, thay vì 6, chúng ta có thể sử dụng 30. Thay vì 30, chúng ta có thể sử dụng tích của Thế nhưng phương pháp này vẫn chưa đủ dù chỉ đối với những số nguyên 64 bit. Vì thế nên chúng ta cần những phương pháp mạnh hơn với ĐPT thấp hơn. 3. Những phép thử nền tảngThường thì những kiểm tra nguyên tố mạnh sẽ hoạt động trong thời gian `n - 1`5, đó là bởi vì hầu hết những phép thử nguyên tố đơn giản sau đều chạy trong thời gian ngắn nhất là `n - 1`5: Nếu p là một số nguyên tố thì:
Tuy nhiên, chỉ đơn thuần sử dụng những phép thử trên sẽ không giúp chúng ta kết luận được số đang thử là số nguyên tố. Ngoài ra còn phép thử: `n`3 khi và chỉ khi `n`1 nguyên tố. Đây là nội dung của định lí Wilson, nhưng việc tính toán biểu thức `n`5 sẽ có ĐPT lớn hơn `n - 1`5. Trên thực tế, trong hầu hết trường hợp, chúng ta chỉ cần phép thử thứ nhất cho các kiểm tra "sừng sỏ" mình sẽ giới thiệu sau đây. 4. Những kiểm tra xác suấtChúng được gọi là "xác suất" vì sau khi kiểm tra, chúng ta không thể thực sự chắc chắn liệu Những số vượt qua kiểm tra xác suất mà trên thực tế không phải là số nguyên tố được gọi là những số "giả nguyên tố". Kiểm tra FermatĐây là kiểm tra xác suất đơn giản nhất. Nó trực tiếp sử dụng định lí Fermat nhỏ: Chọn số Với Kiểm tra Miller-RabinĐây là kiểm tra rườm rà hơn nhưng chắc chắn hơn kiểm tra Fermat, vì đây là kiểm tra số giả nguyên tố mạnh. Kiểm tra này hoạt động như sau: Chọn 1 số
thì Kiểm tra Solovay-StrassenKiểm tra này phức tạp hơn nhưng lại yếu hơn kiểm tra Miller-Rabin. Chọn 1 số Ngoài những kiểm tra xác suất phổ biến trên, còn những kiểm tra khác phức tạp hơn như kiểm tra Frobenius hay kiểm tra Baillie-PSW. Ta cũng có thể sử dụng đồng thời các kiểm tra trên để tăng tính chính xác của thuật toán. Ví dụ như kiểm tra Baillie-PSW sử dụng kiểm tra Miller-Rabin và kiểm tra xác suất Lucas. Tạm kếtTrên đây là những phương pháp phổ biến để kiểm tra tính nguyên tố của một số. Mặc dù sử dụng chúng không thể giúp chúng ta tìm được số nguyên tố lớn nhất hiện nay, chúng có vẻ thừa đủ để hỗ trợ chúng ta trong những vấn đề lập trình hàng ngày. |