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.
Đăng nhận xét