Tổng quan chương trình bồi
dưỡng HSG 9
1.Các kiểu dữ liệu đơn giản:Số nguyên, số thực, kí
tự, lôgic,..
2.Các kiểu dữ liệu có cấu trúc :Mảng,xâu,file
3.Chương trình con: Hàm, thủ tục
4.Các thuật toán cơ bản : Tìm UCLN, tìm số
nguyên tố, sắp xếp,..
5. Đệ quy
Một số chuyên đề
bồi dưỡng HSG9
Chuyên đề 1: BÀI TOÁN SỐ HỌC
Yêu cầu: Học sinh phải nắm được các kiến
thức cơ bản như:
Viết được các hàm xác định số nguyên
tố, số chính phương, tính giai thừa..
Biết cách biểu diễn một số trong hệ thập
phân.
Xác định được số dư, chữ số hàng đơn
vị, hàng trăm, hàng ngàn,…. bằng cách
sử dụng các phép toán DIV, MOD..
VD1_1: Tìm số tự nhiên n nhỏ nhất sao cho
(n+1)(2n+1) chia hết cho 6 và thương là số
chính phương
Program Tim_so;
var i,m,n,l:longint;
ch_phuong:boolean;
BEGIN
i:=0;
repeat
i:=i+1;
n:=(i+1)*(2*i+1);
m:=n div 6;
l:=trunc(sqrt(m));
ch_phuong:= sqr(l)=m;
until (n mod 6 =0) and (ch_phuong);
writeln(i);
readln;
END.
Kết quả
n= 377
VD2_1(HSG9-2010)
Đặt S
N
= 2
1
+2
2
+...+2
N
. Viết chương
trình tìm số dư khi chia S
N
cho 30.
Yêu cầu : Nhập từ bàn phím số
nguyên dương N ( N<=50). In ra
màn hình số dư r khi chia S
N
cho 30
Ví dụ : Với N=10; kết quả là 6
var r,r1,r2,r3,i,N:integer;
Function Haimu(k:integer):longint;
var temp:longint;
begin
temp:=1;
for i:=1 to k do
temp:=temp*2;
Haimu:=temp;
end;
Function TongS(k:integer):longint;
var temp :longint;
i:integer;
begin
temp:=0;
for i:=1 to k do
begin
temp:=temp+ haimu(i);
end;
TongS:=temp;
end;
BEGIN
write('N='); readln(N);
if N<=30 then
r:= tongS(N) mod 30
else
begin
r1:=TongS(30) mod 30;
r2:=Haimu(30) mod 30;
r3:=TongS(N-30) mod 30;
r:= (r1+ r2*r3 ) mod 30
end;
writeln('r=',r); readln;
END.
VD3_1 (HSG9-TKY/2010):
Viết chương trình tìm tất cả các số
nguyên dương N = abcd thỏa mãn
các điều kiện sau
i) abd = (b+d-2a)
2
ii) N+72 là số chính phương.
var N,t:integer;
a,b,c,d:byte;
function ch_ph(i:integer):boolean;
begin
ch_ph:=false;
if i= sqr(trunc(sqrt(i))) then ch_ph:=true;
end;
BEGIN
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for d:=0 to 9 do
begin t:=(b+d-2*a)*(b+d-2*a);
N:= 1000*a+100*b+10*c+d;
if (100*a+10*b+d=t) and ch_ph(N+72) then
writeln(N);
end;
readln;
END.
Kq 1069
VD4_1(HSG 9-2006)
Viết chương trình in ra màn
hình tất cả các số nguyên tố có
bốn chữ số, sao cho tổng các chữ
số của nó bằng tích các chữ số
của nó.
var N,t:integer;
a,b,c,d:byte;
Function Ngto(i:integer):boolean;
var j:integer;
Begin j:=1;ngto:=true;
if i=1 then ngto:=false
else
repeat
j:=j+1;
until (i mod j=0) or (i=j);
if j<i then ngto:=false;
end;
BEGIN
for a:=1 to 9 do
for b:=0 to 9 do
for c:=0 to 9 do
for d:=0 to 9 do
begin
N:=1000*a+100*b+10*c+d;
if (a+b+c+d=a*b*c*d) and ngto(N) then
writeln(N);
end;
readln;
END.
VD5_1:(HSG9-2006)
Hai số tự nhiên được gọi là Nguyên tố
tương đương nếu chúng có chung các
ước số nguyên tố. Cho trước hai số tự
nhiên N, M. Hãy viết chương trình kiểm
tra xem các số này có là nguyên tố
tương đương với nhau hay không.
Ví dụ: 15, 75 là nguyên tố tương đương
const maxN=maxint;
var M,N,i,i0:integer;
a:array[1..maxN] of boolean;
stop:boolean;
BEGIN
fillchar(a,sizeof(A),false);
Write('Nhap vao 2 so M,N='); readln(M,N);
i:=2;
if N<M then begin M:=M+N; N:=M-N; M:=M-N end;
Repeat
while M mod i <>0 do i:=i+1;
A[i]:=true; m:=m div i;
Until m=1;
i:=2;
stop:=false;
Repeat
While N mod i <>0 do i:=i+1;
N:=N div i;
if (not A[i]) then stop:=true;
Until (stop) or (N=1);
if stop then write(‘Khong ngto tuong duong')
else write(‘Ngto tuong duong’);
readln;
END.
VD6_1:
Số “siêu nguyên tố” là số nguyên tố mà khi
bỏ một số tuỳ ý các chữ số bên phải của
nó thì phần còn lại vẫn là một số nguyên
tố( Ví dụ 7331 là một số siêu nguyên tố có
4 chữ số vì 733, 73, 7 cũng là các số
nguyên tố).
Viết chương trình nhập vào một số nguyên
N (0< N <10) và đưa ra kết quả là một số
siêu nguyên tố có N chữ số.
BEGIN
Write ('Nhap N: '); Readln (N);
ka:=1; a[ka]:=0;
For i:=1 to N do
Begin
Kb:=0;
For k:=1 to ka do
For cs:=0 to 9 do
If Prime(a[k]*10+cs) then
Begin
Inc(kb);
b[kb]:=a[k]*10+cs;
End;
ka:=kb;
For k:=1 to ka do a[k]:=b[k];
End;
For k:=1 to ka do Write(a[k]:10);
Readln;
END.
var a,b: array [1..100] of longint;
N,i,k,ka,kb,cs: byte;
Function Prime(N: longint):
boolean;
Var i: longint;
Begin
If (N=0) or (N=1) then
Prime:=false
else
begin
i:=2;
While (N mod i <> 0) and
(i <= Sqrt(N)) do Inc(i);
If i > Sqrt(N) then
Prime:=true
else Prime:=false;
end;
End;
VD7_1: Tìm nghiệm nguyên dương
của phương trình:
Program Pt_nghiem_nguyen;
var x,y:byte;
begin
for x:=15 to 210 do
for y:=15 to 210 do
if (x-14)*(y-14)=196 then
write('(',x,',',y,'),');
readln;
end.
14
1
y
1
x
1
=+
Đáp số:
Có 9 cặp nghiệm:
) 15;210) ,(16;112 ,(
)18;63) ,(21 ;42) ,(28;28 ,(
)42;21),(63;18) ,(112;16 ,(
)210 ;15 (