Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 16
  1. #1
    Tham gia
    01-11-2007
    Bài viết
    5
    Like
    0
    Thanked 2 Times in 2 Posts

    Vui lắm ! Giúp mình gấp giải hộ bài này với(pascal)

    Mình đang học pascal thầy cho bai tập này khó quá ai giúp mình giải với.Đề thế này:
    Nhập từ bàn phím 2 số bất kì M và N (M<N), đếm số nguyên tố và số chính phương trong khoảng từ M->N giải hộ với thank!(mình quên mất số chính phương rồi).Nhớ ghi chi tiết cách giải hộ.
    Quote Quote

  2. #2
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post
    số chinh phương là số chia hết cho 1 va chính nó.
    còn thuật toán tôi chịu

  3. #3
    Tham gia
    09-05-2003
    Location
    ho chi minh
    Bài viết
    191
    Like
    0
    Thanked 0 Times in 0 Posts
    Chèn ơi, ...
    Số chia hết cho 1 và chính nó là số nguyên tố
    Số chính phương là số = bình phương của một số nguyên khác (Ví dụ: só chính phương: 4(=2 bình phương),9,16, ...

    Dựa vào định nghĩa mà lập trình thôi. D chỉ nói thuật toán thôi nhé!
    Để đơn giản, rõ ràng, dễ hiểu, tốt nhất là viết thành 3 hàm, 1 hàm kiểm tra N có phải là số Nguyên tố, 1 hàm kiểm tra N có phải là số chính phương, và hàm cuối cùng là cho ra kết quả

    1. Hàm kiểm tra N có phải là số nguyên tố
    Ban đầu, gán Kết quả trả về=True
    Nếu N=1, gán Kết quả = False // mặc nhiên coi 1 không phải là số nguyên tố, cái này tùy quan điểm mỗi người nhé
    Nếu N=2 Gán kết quả = True
    Nếu N!=1&&N!=2 thực hiện
    ....Vòng lặp với i= 2 đến N/2, thực hiện
    ........Nếu(N chia hết cho i) trả ra kết quả = False và thoát khỏi chương trình
    Xong!

    2.Tương tự cho hàm kiểm tra số chính phương, coi thử căn bậc 2 của N có phải là số nguyên hay không, hm... cái này chỉ là D thử thôi nhé, chưa làm bao giờ nên ko biết có đúng hay không!
    Gán biến Temp_float=sqrt(N)// ghi chú Temp_float là kiểu số thức và Temp_int là kiểu số nguyên
    Sau đó ép kiểu phát, Cho biến Temp_int=(int)Temp_float
    Rồi so sánh Nếu (Temp_float=(float)Temp_int) thì kết quả là đúng, ngược lại là sai
    Xong !

    Cuối cùng là hàm theo yêu cầu đề bài
    Khởi tạo 2 biến Đếm_SNT=0 và Đếm_SCP=0
    Vòng lặp i=M đến N, thực hiện
    ....Nếu i là số nguyên tố thì Đếm_SNT++
    ....Nếu i là số chính phương thì Đếm_SCP++
    Kết thúc!

    Để coi, hình như nếu nó là số nguyên tố thì không thể là số chính phương thì phải, bạn có thể thêm một chút để tối ưu thuật toán!
    Hy vọng giúp được bạn!

  4. #4
    Tham gia
    28-10-2007
    Bài viết
    106
    Like
    0
    Thanked 1 Time in 1 Post
    Theo tui tìm số chính phương chỉ cần
    If (sqrt(a)mod 1)=0 then writeln(a,'la so chinh phuong')

  5. #5
    tranvanho Guest
    đêđếm số nguyên tố và số chính phương từ M->N thì tui nghĩ mình nên xài vòng lặp for i:=M to n do
    rùi xài hàm tính số chính phương và nguyên tố để tính(hàm tự tạo)
    nếu kết quả là true thì giá trị tăng lên 1
    ok

  6. #6
    Tham gia
    01-11-2007
    Bài viết
    5
    Like
    0
    Thanked 2 Times in 2 Posts

    Hạnh phúc Giúp mình gấp giải hộ bài này(pascal)

    Những định nghĩa trên cái nào đúng về số nguyên tố và số chính phương vậy .Dùng 1 dòng for i:=M to N do nhưng những câu lệnh dưới thế nào ghi rõ giùm cái thật khó hiểu thank trước nha!

  7. #7
    Tham gia
    03-01-2004
    Bài viết
    903
    Like
    0
    Thanked 11 Times in 7 Posts
    Tui nghĩ xài "Sàng Eratosthenes" cho dễ cài đặt

    (hiểu biết nông cạn; có gì sai sót mong được góp ý, xin cám ơn)

    -thân

  8. #8
    tranvanho Guest
    số nguyên tố là số chỉ chia hết cho 1 và chính nó
    số chính phương là số có căn bậc 2 là 1 số nguyên
    còn viết hàm kiểm tra số nguyên tố thì
    function ktnt(a:integer):boolean;
    i:integer;tong:byte;
    begin
    repeat
    i:=i+1;
    if a mod i=0 then
    tong:=tong+1;
    until i=a;
    if tong>=3 then
    ktnt:=false
    else ktnt:=true;
    end;

  9. #9
    tranvanho Guest
    còn hàm kiểm tra số chính phương thì phải nhờ các cao thủ khác thui mình bó chiếu
    bạn cho vòng for i:=M to N do
    if ktnt=true then tong:=tong+1;
    cứ như vậy thôi
    mà bạn học 11 hả mình cũng học 11 nè

  10. #10
    Tham gia
    25-09-2006
    Bài viết
    533
    Like
    0
    Thanked 1 Time in 1 Post
    function cp(n:integer):boolean;
    begin
    cp:=false;
    if n<4 then exit;
    if sqr(trunc(sqrt(n)))=n then cp:=true
    end;

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •