Pascal: SOLUTIONS BÀI TẬP 7
Bài tập 7.1:
Mã chương trình:
|
Program Nguyen_to; Var n,i:integer; Function NT(n:integer):Boolean; Var ok: Boolean; i: integer; Begin ok:=true; for i:=2 to n-1 do if (n mod i)= 0 then ok:=ok and false; if n < 2 then NT:=false else NT:=ok; End; Begin Write('Nhap n: ');Readln(n); i:=n; Repeat i:=i+1; Until NT(i); Write('So nguyen to nho nhat lon hon ',n, 'la: ',i); Readln End. |
Bài tập 7.2:
Mã chương trình:
|
Program Phan_tich; var n,i: integer; Begin Write('Nhap so can phan tich: ');Readln(n); i:=2; Write('Ket qua phan tich:'); Write(n,'='); While n>1 do Begin if n mod i = 0 then Begin Write(i,'.'); n:= n div i End else i:=i+1; End; Readln End. |
Nhận xét:
Cài đặt trên in dư một dấu nhân ở cuối. Hãy chỉnh sửa để bỏ dấu nhân thừa này.
Bài tập 7.3:
Mã chương trình:
|
Program Phan_tich_nguyen_to_2; Var n, Max, so, i:byte; Function PTNT(n:integer):byte; Var i,p:byte; Begin i:=2; p:=0; While n>1 do if (n mod i)=0 then Begin p:=p+1; n:=n div i end else i:=i+1; PTNT:=p; End; Procedure PT(n:integer); Var i:byte; Begin i:=2; While n>1 do if (n mod i)=0 then Begin Write(i,'.'); n:=n div i end else i:=i+1; End;
Begin Write('Nhap so n: ');Readln(n); Max:=0; For i:= 1 to n do if PTNT(i)>=Max then Begin Max:=PTNT(i); So:=i End; Write('So ',So,' co nhieu uoc nhat,',so,' = '); PT(So); Readln End. |
Bài tập 7.4:
Mã chương trình:
|
Program Phan_tich; Var M: array[1..1000] of byte; i: byte; n: integer; Begin For i:=1 to 1000 do M[i]:=0; Write('Nhap so n: ');Readln(n); i:=2; While n>1 do if (n mod i = 0) then begin M[i]:=M[i]+1; n:=n div i End else i:=i+1; For i:=1 to 1000 do if M[i]>0 then Begin If M[i]>1 then Write(i,'^',M[i],'.') else Write(i,'.') End; Readln; End. |
Bài tập 7.5:
Mã chương trình:
|
Program Tong_nguyen_to; Var i,n:integer; Function NT(n:integer):Boolean; Var ok: Boolean; i:integer; Begin ok:=true; For i:=2 to n-1 do if (n mod i) = 0 then ok:=ok and false; if n>=2 then NT:=ok else NT:=false; End; Begin Write('Nhap so n: ');Readln(n); For i:=2 to n div 2 do if (NT(i) and NT(n-i)) then Writeln(n,' = ',i,' + ',n-i); Readln End. |
Nhận xét:
Hãy mở rộng bài toán theo hướng:
- Xét xem trong đoạn [n1...n2] số nào cho phép tách thành tổng hai số nguyên tố nhiều trường hợp nhất.
- Tách một số thành tổng ba số nguyên tố.
Bài tập 7.6:
Mã chương trình:
|
Program Cap_so_huu_nghi; Var a,b,n,i:integer; Function TU(a:integer):integer; Var Tg,i:integer; Begin Tg:=0; For i:=1 to a-1 do if (a mod i = 0) then Tg:=Tg + i; TU:=Tg; End; Begin Write('Nhap so n: ');Readln(n); For a:=1 to n do Begin b:=TU(a); if TU(b)=a then Writeln(a,'-',b) end; Readln; End. |
Nhận xét:
Các số hoàn chỉnh luôn là hữu nghị của chính nó.
Bài 7.7:
Mã chương trình:
program KTSNT;
var j,n:integer;
function ktnt(k:integer):boolean;
var j:integer;
begin
ktnt:=false;
if k<2 then exit;
for j:=2 to trunc(sqrt(k)) do
if k mod j=0 then exit;
ktnt:=true;
end;
BEGIN
write('Nhap n = ');readln(n);
if ktnt(n)=true then write(n,' la so ngto')
else write(n,' khong la so ngto');
readln
END.
Bài 7.8:
Mã chương trình:
program Xuat_snt;
uses crt;
var i,n,dem:integer;
function ktnt(k:integer):boolean;
var j:integer;
begin
ktnt:=false;
if k<2 then exit;
for j:=2 to trunc(sqrt(k)) do
if k mod j=0 then exit;
ktnt:=true;
end;
begin
clrscr;
write('nhap vao so n= ');readln(n);
for i:=2 to n do
if ktnt(i) then
begin
write(' ',i);
dem:=dem+1;
end;
writeln;
writeln('Co tat ca ',dem,' so nguyen to');
readln;
end.
Bài 7.9:
Mã chương trình:
program sontcungnhau;
uses crt;
var a,b,x,y:integer;
{Ham kiem tra uoc chung lon nhat}
function ucln(var m,n:integer):integer;
var du:integer;
begin
while n<>0 do
begin
du:=m mod n;
m:=n;
n:=du;
end;
ucln:=m;
end;
{Ham kiem tra so nguyen to}
function snt(var m:integer):boolean;
var i:integer;
begin
snt:=false;
for i:=2 to trunc(sqrt(m)) do
if m mod i = 0 then exit;
snt:=true;
end;
{Chuong trinh chinh}
begin
clrscr;
write('Nhap vao so thu nhat: ');readln(a);
write('Nhap vao so thu hai: ');readln(b);
x:=a;
y:=b;
if snt(a) and snt(b) then
begin
if (ucln(a,b)=1) then
writeln('Ket qua: ',x,' va ',y,' la hai so nguyen to cung nhau')
else
writeln('Ket qua: ',x,' va ',y,' khong la hai so nguyen to cung nhau');
end
else
writeln('Khong phai cung la hai so nguyen to can kiem tra');
readln;
end.
Bài 7.10:
Mã chương trình:
program so_ngto;
uses crt;
var i,j,n:longint;
Function ngto(m:longint):boolean;
var t:longint;
Begin
if m<2 then ngto:=false
else
Begin
ngto:=true;
for t:=2 to trunc(sqrt(m)) do
if m mod t=0 then
Begin
ngto:=false;
break;
end;
end;
end;
Begin
clrscr;
write('Nhap vao mot so van kiem tra (n>=1): ');readln(n);
if (ngto(n)=false) or (n<4) then
writeln(' So ',n,' ko la so ngto')
else
begin
i:=n-2;
while (i>0) do
if ngto(i) then
break
else i:=i-2;
j:=n+2;
while (j>n) do
if ngto(j) then
break
else j:=j+2;
if n > ((i+j)/2) then
writeln('So ',n,' la so ngto manh')
else
writeln('So ',n,' ko phai la so ngto manh');
end;
readln;
End.
Bài 7.11:
Mã chương trình:
PROGRAM Phan_Tich_SNT;{Dang 100=2*2*5*5}
Uses crt;
VAR i,n :INTEGER;
BEGIN
clrscr;
Write ('Nhap n:');Readln(n);
Write (n,'=');
i:=2;
REPEAT
WHILE n MOD i <> 0 DO
i:=i+1;
Write(i);
n:=n DIV i;
IF n > 1 THEN
write ('*');
UNTIL n = 1;
readln;
END.
Bài 7.12:
Mã chương trình:
PROGRAM Phan_Tich_SNT;
Uses crt;
VAR i,n :INTEGER;
BEGIN
clrscr;
Write ('Nhap n:');Readln(n);
i:=2;
REPEAT
WHILE n MOD i <> 0 DO i:=i+1;
Writeln(n:5,' | ',i:2);
n:=n DIV i;
UNTIL n = 1;
writeln(1:5,' |');
writeln('Da xu ly xong !');
readln;
END.
Bài 7.13: Dãy Fibonacci và số nguyên tố
Mã chương trình:
uses crt;
var j,i,m,a,b,t:longint;
{----------------------}
Function kt(n:longint):boolean;
var i,d:integer;
begin
kt:=false;
d:=0;
For i:=1 to n do
if n mod i=0 then inc(d);
if d=2 then kt:=true;
end;
{----------------------}
begin
clrscr;
Write('Nhap m= ');readln(m);
a:=0;
b:=1;
Repeat
a:=a+b;
b:=a+b;
Until (a>=m) and (b>=m);
if a<b then begin t:=a;a:=b;b:=t;end;
Repeat
a:=a-b;
b:=b-a;
Until ( (kt(a)) and (a<m)) or ( (kt(b)) and (b<m) );
If a>b then writeln(a);
if b>a then writeln(b);
readln
end.