BÀI TẬP 74: SỐ GIẢ NGUYÊN TỐ

số giả nguyên tố

    Trong lý thuyết số ‘số giả nguyên tố’ là một số (có thể là hợp số) thỏa mãn một tính chất nào đó của số nguyên tố. Tùy theo tính chất mà ta sẽ có các loại số giả nguyên tố khác nhau. Ta quy ước tính chất của một số giả nguyên tố như sau: “Là một số thập phân hữu hạn dương mà từng chữ số của nó hoặc từng chữ số ở phần thập phân của nó là nguyên tố và tổng các chữ số của nó là số nguyên tố (với phần nguyên và phần thập phân cách nhau bởi dấu phẩy)”. Hãy viết chương trình kiểm tra xem một số có phải là “số giả nguyên tố” hay không?

            - Dữ liệu vào từ file: GiaNT.INP chỉ một dòng duy nhất ghi số thập phân hữu hạng dương (có độ dài không quá 500 chữ số).

            - Kết quả ghi vào file: GiaNT.OUT ghi kết quả “CO” hoặc “KHONG”.

Ví dụ:

            GIANT.INP

GIANT.OUT

73,232

CO

73,23212

KHONG

a Ý tưởng:

+ Khai báo mảng NT đánh dấu số nguyên tố 1 chữ số

+ Tách xâu thành 2 phần: phần nguyên và phân thập phân

+ Kiểm tra phần thập phân các chữ số có phải là số nguyên tố không: nếu có 1 chữ số không phải số nguyên tố thì thông báo “KHONG” kết thúc.

Ngược lại tính tổng các chữ số từ phần nguyên đến phần thập phân sau đó kiểm tra tổng có phải là số nguyên tố không: Nếu có thông báo “CO” ngược lại “KHONG”


CODE THAM KHẢO:

program So_GiaNT;

var fi,fo: text;

    NT: array[1..10] of boolean;

    s: ansistring;

function NgTo(T: longint): boolean;

var i: longint;

begin

        NgTo:=true;

        if T < 2 then exit(False)

        else

                for i:=2 to trunc(sqrt(T)) do

                if T mod i = 0 then exit(false);

end;

procedure Tinh;

var i,j,n,t,kt: integer;

    S1, S2: ansistring;

begin

        T:=0; Kt:=0;

        j:=pos(',',s);

        s1:=copy(s,1,j-1); //Tach phan nguyen

        s2:=copy(s,j+1,length(s)); //Tach phan thap phan

        for i:=1 to length(s2) do  //phan thap phan

        begin

                N:=ord(s2[i])-48;

                if (NT[N] = false) then

                begin

                        Kt:=1; write(fo,'KHONG'); break;

                end else T:=T+N;

        end;

        if Kt = 0 then   //Phan nguyen

        begin

                for i:=1 to length(s1) do T:=T+Ord(s1[i])-48;

                if NgTo(T) = True then write(fo,'CO') else write(fo,'KHONG');

        end;

end;

begin


        fillchar(NT,sizeof(NT),false);

        NT[2]:= True; NT[3]:=True; NT[5]:=True; NT[7]:=True;

        assign(fi,'GIANT.INP'); reset(fi);

        readln(fi,s);

        assign(fo,'GIANT.OUT'); rewrite(fo);

        Tinh;

        close(fi); close(fo);

end.




Nhãn:

Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget