Số hoàn hảo Số hoàn thiện (hay còn gọi là số hoàn chỉnh, số hoàn hảo hoặc số hoàn thành) là một số nguyên dương mà tổng các ước nguyên dương của nó (số nguyên dương chia hết cho nó) bằng chính nó Ví dụ Số 6 có ước nhỏ hơn nó là 1,2,3 Tổng là 1+2+3=6 vậy 6 là số hh Số 8 chia hết cho 1, 2, 4 tổng 1+2+4=7 → 8 không phải là số hh Số 28 chia hết cho 1, 2,4, 7, 14 tổng 1+2+4+7+14=28 → 28 là số hh 1 Nhập vào số nguyên n, kiểm tra n có phải là số hoàn hảo không? Nhận xét số hoàn hảo là số có tổng các ướ.
Số hồn hảo Số hồn thiện (hay cịn gọi số hoàn chỉnh, số hoàn hảo số hoàn thành) số nguyên dương mà tổng ước nguyên dương (số nguyên dương chia hết cho nó) Ví dụ: Số có ước nhỏ 1,2,3 Tổng 1+2+3=6 số hh Số chia hết cho 1, 2, tổng 1+2+4=7 → số hh Số 28 chia hết cho 1, 2,4, 7, 14 tổng 1+2+4+7+14=28 → 28 số hh Nhập vào số nguyên n, kiểm tra n có phải số hồn hảo khơng? Nhận xét: số hồn hảo số có tổng ước thực - Để kiểm tra n có phải số hồn hảo khơng? Ta tìm ước thực n cộng ước thực lại, tổng ước thực n n số hồn hảo b Chương trình tham khảo: Program sohoanhao; Var i,n,tong:longint; Begin Readln (n); Tong:= 0; For i:=1 to n-1 If n mod i = then tong:=tong+i; If tong=n then write (n, ‘la so hoan hao’); Readln; End Viết chương trình nhập vào số n từ bàn phím thơng báo hình số có phải số hồn hảo hay không (yêu cầu dùng hàm) PROGRAM SoHoanHao; USES CRT; VAR n:INTEGER; FUNCTION KiemTra(x:INTEGER):BOOLEAN; VAR tam,i:INTEGER; BEGIN tam:=0; FOR i:= TO (x DIV 2) DO 10 IF x MOD i = THEN tam:=tam+i; 11 IF tam = x THEN KiemTra:=TRUE 12 Else KiemTra:=False; 13 END; 14 BEGIN 15 Clrscr; 16 Write('Nhap so can kiem tra ');Readln(n); 17 IF KiemTra(n) THEN 18 19 20 21 22 Writeln('So ',n,' la so hoan hao') ELSE Writeln('So ',n,' khong phai la so hoan hao'); Readln; END 23 Yêu cầu: Cho dãy số a1, a2, an Hãy giúp Bờm đếm xem dãy có số có tổng chữ số số hoàn hảo Dữ liệu vào: Từ file BAI2.INP gồm: - Dòng số nguyên dương n (n ≤ 100) - n dòng ghi n số nguyên a1, a2, an (0 ≤ ≤109) Kết quả: Ghi file BAI2.OUT gồm: Một dòng kết toán program sohoanhao; uses crt; var N,i,dem:longint; a:array[1 100] of longint; f1,f2:text; function sohoanhao(n:longint):boolean; var S,i:longint; shh:boolean; Begin S:=0;shh:=true; for i:=1 to n-1 if n mod i = then S:=S+i; if nS then shh:=false; sohoanhao:=shh; End; { } BEGIN assign(f1,'sohoanhao.inp');reset(f1); assign(f2,'sohoanhao.out');rewrite(f2); readln(f1,N); dem:=0; for i:=1 to N Begin readln(f1,a[i]); if sohoanhao(a[i]) then inc(dem); End; write(f2,dem); close(f1);close(f2); END Bài Số phương Cho số nguyên n, kiểm tra n có phải số phương khơng? Ý tưởng: Dựa định nghĩa số phương: bình phương số tự nhiên Ta có: = 0.0, , , , , Nhận xét: Số phương số có phần thập phân bậc Như vậy, để viết chương trình ta sử dụng hàm sqrt() để lấy bậc 2, hàm frac () để lấy phần thập phân Chương trình tham khảo: Program CP; Var n:longint; Begin Write (‘nhap n:’); Readln (n); If (frac(sqrt(n))=0) and (n>=0) then write (n, ‘la so CP’) else write (n, ‘ko la so CP’); Readldn End In số phương nhỏ 100 Ý tưởng: Để kiểm tra số phương nhỏ 100 ta kiểm tra số từ đến 99 có phải số phương không, câu lệnh for … to … Chương trình tham khảo: Program CP; Var i:longint; Begin For i:=0 to 99 If frac(sqrt(i))=0 then write (i,’ ‘); Readldn End Tính tổng số phương dãy số tự nhiên liên tiếp 1, 2, 3, , N (N Đưa phần tử mảng a lui sau đơn vị, sau chèn số k vào vị trí dãy In kết Chương trình tham khảo: Var a:array[1 50] of longint; I,n,k: longint; Begin Read (n);read (k); For i:=1 to n read (a[i]); For i:=n+1 downto A[i]:=a[i-1]; A[1]:=k; For i:=1 to n+1 Write (a[i], ‘ ‘); Readln; Readln; End BT: Viết chương trình nhập vào dãy số nguyên a gồm n phần tử Chèn số k vào vị trí cuối dãy Lấy ví dụ: => Giữ nguyên phần tử dãy, sau chèn số k vào vị trí cuối dãy In kết Chương trình tham khảo: Var a:array[1 50] of longint; I,n: longint; Begin Read (n); read (k); For i:=1 to n read (a[i]); For i:=1 to n+1 a[n+1]:=k; For i:=1 to n+1 write (a[i], ‘ ‘); Readln; Readln; End BT: Viết chương trình nhập vào dãy số nguyên a gồm n phần tử kiểm tra số k, số k số phương chèn số k vào vị trí đầu dãy, ngược lại chèn vào cuối dãy Ý tưởng: Lấy ví dụ: 3 => 7 => BT: Kiểm tra số k có phải số phương khơng, số k số phương chèn số k vào vị trí đầu dãy, ngược lại chèn vào cuối dãy In kết Chương trình tham khảo: Var a:array[1 50] of longint; I,n,k: longint; Begin Read (n);read (k); For i:=1 to n read (a[i]); If frac(sqrt(k)) = then begin For i:=n+1 downto A[i]:=a[i-1]; A[1]:=k; End; If frac(sqrt(k)) then begin For i:=1 to n+1 A[n+1]:=k; End; For i:=1 to n+1 Write (a[i], ‘ ‘); Readln; Readln; End BT: Viết chương trình nhập vào dãy số nguyên a gồm n phần tử Sắp xếp mảng theo thứ tự chẵn hàng, lẻ hàng Ý tưởng: Lấy ví dụ: => 357 1 1 1 => 1 1 1 2 2 2 => 2 2 2 3 3 => 3 3 Nhập vào phần tử mảng Kiểm tra phần tử mảng phần tử chẵn in Sau xuống dịng, trở vị trí ban đầu, kiểm tra phần tử mảng, phần tử số lẻ in Chương trình tham khảo: Var a:array [1 50] of longint; I,n:longint; Begin Read (n); For i:=1 to n Read (a[i]); For i:=1 to n If a[i] mod = then write (a[i],’ ‘); writeln; For i:=1 to n If i mod then write (a[i],’ ‘); Readln End ... close(f1);close(f2); END Bài Số phương Cho số nguyên n, kiểm tra n có phải số phương khơng? Ý tưởng: Dựa định nghĩa số phương: bình phương số tự nhiên Ta có: = 0.0, , , , , Nhận xét: Số phương số có phần thập... trình nhập vào dãy số nguyên a gồm n phần tử kiểm tra số k, số k số phương chèn số k vào vị trí đầu dãy, ngược lại chèn vào cuối dãy Ý tưởng: Lấy ví dụ: 3 => 7 => BT: Kiểm tra số k có phải số. .. dãy vô hạn số tự nhiên bắt đầu hai phần tử và 1, phần tử sau thiết lập theo quy tắc phần tử tổng hai phần tử trước Hướng dẫn lập trình Pascal: Viết chương trình tính số Fibonacci Tính số Fibonacci: