# Trung tâm xử lý sự cố > Hỏi-Đáp về Lập trình >  xem xét số nguyên tố trên chương trình pascal

## thangvigreenland

thưa các anh chị, mong mọi người giải giúp em bt bày (bài tập viết bằng trên chương trình pascal ): nhập n bất kì, hãy viết chương trình xem n đó có phải số nguyên tố không? xin đc học hỏi!

----------


## lechi217

tham khảo here: http://www.diendantinhoc.vn/showthread.php?p=121599

----------


## nguyenngoc20

với những bài tập như này theo mình bạn nên bắt tay vào làm thì hơn, vì đó đều là những dạng rất cơ bản và hữu ích về sau. bạn chỉ nên hỏi khi bạn đã động não vì nó, có như thế bạn mới thật sự hiểu và học tốt được. nếu chỉ lên diễn đàn xin code về để nộp bài thì bạn sẽ không hiểu được code hoạt động như nào và học môn này sẽ thấy rất khó khăn. 
link của anh smod đưa có chủ yếu là bàn luận về các phương pháp kiểm tra nhanh tính nguyên tố, viết ra nhiều số nguyên tố... bạn nên tham khảo chứ đừng nên copy nguyên, vì copy nguyên đem nộp là sai đấy [img]data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaabaqmaaaa  l21bkaaaaa1bmvexh5pjm+ykvaaaaaxrstlmaqobyzgaaaapjr  efucndjyaaaaaiaaeihvdmaaaaasuvork5cyii=[/img]

----------


## wuisatang

chỉ gợi ý cho bạn cách giải thoy ! bạn dùng cách làm bình thường như bạn giải toán bên ngoài ! lấy n chia từ 1 đến căn bậc 2 n , nên nhớ phải là số nguyên , nếu ko có số nào mà n chia hết trừ 1 thì n là số ngtố

----------


## doken

nhập n bất kì thì có mà cháy bộ nhớ mới tính xong =))

----------


## sonhp

xin cảm ơn các anh chị ạ đã cho ý kiến!

----------


## ThuyDuongNL1

```
<?php  $a=$_post["a"]; if($a) {  if($a==2) $c="$a là số nguyên tố";  elseif($a<2) $c="không có số nguyên tố";  else { for($i=2;$i<$a;$i++) { if($a%$i==0) {
$c="$a không phải là số nguyên tố"; break; }
else $c="$a là số nguyên tố"; } }  } ?>
```

tớ thì không nhớ pascal nhưng tớ biết ngôn ngữ khác , và đây là thuật toán của nó . code bạn tự viết nhé

----------


## viet nam

*bài làm:*




> thưa các anh chị, mong mọi người giải giúp em bt bày (bài tập viết bằng trên chương trình pascal ): nhập n bất kì, hãy viết chương trình xem n đó có phải số nguyên tố không? xin đc học hỏi!


mọi người xem mình làm bài này ra sao:
program bai_lam;
uses crt;
var n,i,d:longint;
begin
clrscr;
write('nhap n:');readln(n);
for i:=2 to n-1 do 
if n mod i=0 then d:=d+1;
if d=0 then writeln(n,' la so nguyen to!')
else writeln(n,' khong la so nguyen to!');
readln;
end.

----------


## muabansimsodep

code của bạn đúng rồi nhưng cần chỉnh lại để tối ưu hơn:
_ gán d:=0 trước khi dùng tới d;
_ vòng for chỉ cần chạy từ i=2->trunc(sqrt(n)) là ok rồi, chạy tới n-1 cũng được nhưng mất thời gian hơn nhiều. trunc (n): làm tròn số n, sqrt(n): lấy căn bậc 2 của n.

----------


## minhphuc0101

*[img]data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaabaqmaaaa  l21bkaaaaa1bmvexh5pjm+ykvaaaaaxrstlmaqobyzgaaaapjr  efucndjyaaaaaiaaeihvdmaaaaasuvork5cyii=[/img]*

theo em không cần gán d:=0 trước vì lúc đầu nếu không nói gì về biến d thì d đã được gán bằng 0 rồi.
còn n-1 thay bằng trunc cũng được nhưng bạn luongminh mới học nên có lẽ chưa hiểu vấn dề này!
[img]data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaabaqmaaaa  l21bkaaaaa1bmvexh5pjm+ykvaaaaaxrstlmaqobyzgaaaapjr  efucndjyaaaaaiaaeihvdmaaaaasuvork5cyii=[/img]

----------


## congthanh2406

xin cảm ơn bạn sontrang đã cho ý kiến... đúng là em chỉ mới học pascal thôi! mong các anh chị giúp đõ thêm!.

----------


## tuylasg

nhiều thầy cô khó tính thì bạn không gán d:=0 trước khi dùng đến d thì sẽ bị 1 lỗi nhé. 

tại vì freepascal đã được cải thiện hơn những chương trình turbopascal trước khi nhiều. nếu ta dùng turbopascal cũ thì không gán d:=0 sẽ bị lỗi ngay hoặc ra kết qua nào đó không phải kết quả chính xác. bởi vì máy chưa hiểu biến d ban đầu là bao nhiêu. theo tính logic thì nên gán d:=0 trước khi dùng đến d.

----------


## dungwinline

chỉ có freepascal thì mới thực hiện gán giá trị ban đầu bằng 0 thôi bạn ạ!

----------


## hlong001

bạn mới học nên càng phải tập thói quen gán giá trị (gì cũng được) cho biến lúc ban đầu để tránh tình trạng bị lỗi không biết nguyên nhân (kinh nghiệm xương máu của mình đấy)

----------

