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.