1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tính nguyên tố của một số nguyên và sử dụng tính nguyên tố để giải quyết một số bài toán

19 87 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 53,07 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

+ Vận dụng các kiến thức đã học để giải các bài toán thực tế + Hình thành và phát triển tư duy logic + Hình thành các bước để giải quyết vấn đề nêu ra + Dạy học thông qua các chuyên đề đ

Trang 1

MỤC LỤC

TRANG

1 MỞ ĐẦU 2

1.1 Lý do chọn đề tài 2

1.2 Mục đích nghiên cứu 2

1.3 Đối tượng nghiên cứu 3

1.4 Phương pháp nghiên cứu 3

2 NỘI DUNG CỦA SÁNG KIẾN KINH NGHIỆM 3

2.1 Cơ sở lý luận của sáng kiến kinh nghiệm 3

2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm 3

2.3 Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải quyết vấn đề 4

2.3.1 Kiểm tra tính nguyên tố của một số nguyên dương ……… 4

2.3.2 Phân tích một số thành tích các thừa số nguyên tố ……… ……….6

2.3.3 Một số ví dụ………7

2.4 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường 17

3 KẾT LUẬN, KIẾN NGHỊ 17

1 Kết luận 17

2 Kiến nghị 17

Trang 2

1 MỞ ĐẦU

1.1 Lý do chọn đề tài:

Công nghệ thông tin của nước ta hiện nay đang rất phát triển đưa ra nhiều triển vọng cho tất cả các ngành trong việc tin học hoá xã hội Công nghệ tông tin

có ý nghĩa rất quan trọng đối với rất nhiều lĩnh vực của đời sống, máy tính hiện nay cũng không còn xa lạ đối với mọi người Trong ngành giáo dục hiện nay cũng là một ngành đang đưa công nghệ thông tin vào ứng dụng trong việc dạy

và học

Thực hiện Nghị quyết số 26/NQ-CP ngày 15/4/2015 của Chính phủ ban hành Chương trình hành động thực hiện Nghị quyết số 36-NQ/TW ngày 01/7/2014 của Bộ Chính trị Ban Chấp hành Trung ương Đảng Cộng sản Việt Nam về đẩy mạnh ứng dụng, phát triển công nghệ thông tin (CNTT) đáp ứng yêu cầu phát triển bền vững và hội nhập quốc tế; thực hiện Quyết định số 1755/QĐ-TTg ngày 22/9/2010 của Thủ tướng Chính phủ phê duyệt Đề án “Đưa Việt Nam sớm trở thành nước mạnh về công nghệ thông tin và truyền thông”; thực hiện Chỉ thị số 16/CT-TTg ngày 04/5/2017 của Thủ tướng Chính phủ về việc tăng cường năng lực tiếp cận cuộc Cách mạng công nghiệp lần thứ 4, Bộ Giáo dục và Đào tạo hướng dẫn cơ chế đặc thù đào tạo các ngành thuộc lĩnh vực CNTT trình độ đại học giai đoạn 2017-2020 để đáp ứng nhu cầu của thị trường lao động và hội nhập quốc tế

Học sinh THPT là nguồn lao động trẻ có thể sử dụng ngay sau khi tốt nghiệp do vậy việc được tiếp cận công nghệ thông tin từ trong nhà trường phổ thông sẽ giúp cho học sinh có thể tự tin hơn trong công việc Việc đào tạo học sinh có nền tảng lập trình cơ bản và có đam mê lập trình có vai trò quan trọng trong sự phát triển sau này của các em Thông qua việc dạy đội tuyển học sinh giỏi, dạy những lớp mũi nhọn nhiều năm để học sinh yêu thích lập trình tôi rút

ra những kinh nghiệm sau:

+ Tạo sự đam mê lập trình và đọc sách

+ Vận dụng các kiến thức đã học để giải các bài toán thực tế

+ Hình thành và phát triển tư duy logic

+ Hình thành các bước để giải quyết vấn đề nêu ra

+ Dạy học thông qua các chuyên đề độc lập hay liên hệ giữa toán học và tin học để giải quyết các bài toán

Trong quá trình dạy học sinh và đứng đội tuyển học sinh giỏi tôi thấy rằng nhiều bài toán sẽ được giả quyết nhanh nếu chúng ta biết tính chất của các số và

áp dụng hợp lý Với những lý do trên tôi chọn đề tài về “Tính nguyên tố của

một số nguyên và sử dụng tính nguyên tố để giải quyết một số bài toán”

1.2 Mục đích nghiên cứu.

Đưa ra tính nguyên tố của một số nguyên, các thuật toán cơ bản liên quan đến số nguyên tố Đưa ra một số bài toán có sử dụng tính nguyên tố của một số nguyên để giải quyết Qua các bài toán này giúp học sinh yêu thích việc tư duy logic và thấy được sự kỳ diệu của các con số

Trang 3

1.3 Đối tượng nghiên cứu.

Học sinh khối 11 và đội tuyển học sinh giỏi trường THPT Nông Cống 1

1.4 Phương pháp nghiên cứu

Phương pháp phân tích thuật toán, kiểm tra đánh giá năng lực học sinh, phát triển tư duy logic Một số tài liệu tham khảo và tìm kiếm thông tin trên internet

2 Nội dung sáng kiến

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm.

- Nghị quyết số 44/NQ-CP, ngày 09/6/2014 Ban hành chương trình hành động của chính phủ thực hiện nghị quyết số 29-NQ/TW ngày 04/11/2013 Hội nghị lần thứ 8 Ban chấp hành Trung ương khóa XI về đổi mới căn bản, toàn diện giáo dục và đào tạo, đáp ứng yêu cầu công nghiệp hóa trong điều kiện kinh tế thị trường định hướng xã hội chủ nghĩa và hội nhập quốc tế xác định “Đổi mới hình thức, phương pháp thi, kiểm tra và đánh giá kết quả giáo dục theo hướng đánh giá năng lực của người học; kết hợp đánh giá cả quá trình với đánh giá cuối kỳ học, cuối năm học theo mô hình của các nước có nền giáo dục phát triển”

- Luật Giáo dục số 38/2005/QH11, Điều 28 quy định: “Phương pháp giáo dục phổ thông phải phát huy tính tích cực, tự giác, chủ động, sáng tạo cảu học sinh; phù hợp với đặc điểm của từng lớp học, môn học; bồi dưỡng phương pháp

tự học, khả năng làm việc theo nhóm; rèn luyện kỹ năng kiến thức vào thực tiễn; tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh”

+ Ngoài việc tạo điều kiện cho học sinh chiếm lĩnh những tri thức và kỷ năng Tin học cần thiết, Tin học còn có tác dụng phát triển năng lực trí tuệ chung như: phân tích, tổng hợp, trừu tượng hoá, khái quát hoá…rèn luyện những đức tính, phẩm chất của người lao động mới Học sinh sẽ thấy rõ hiệu quả mạnh mẽ của công nghệ thông tin và nhận thức cần có

2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm.

Sự quan trọng của CNTT trong xã hội hiện nay ai cũng biết nhưng để được sự quan tâm của các em học sinh, phụ huynh, nhà trường là cả một khó khăn

Quá trình thực hiện đề tài tại trường THPT Nông Cống 1 tôi có một số thuận lợi và khó khăn sau:

2.2.1 Thuận lợi:

* Nhà trường:

- Ban giám hiệu nhà trường luôn đạo điều kiện tốt nhất để giáo viên và học sinh học tập

- Nhà trường đã đầu tư một phòng thực hành tin với 24 máy tính xách tay

để cho các em đam mê lập trình và đội tuyển học sinh giỏi học tập

- Được sự giúp đỡ, tạo điều kiện của tổ nhóm chuyên môn Toán – Tin

Trang 4

* Học sinh:

Nhiều học sinh đã thấy được tiềm năng phát triển của ngành CNTT trong tương lai, qua đó có ý thức và định hướng về nghề CNTT

2.2.2 Khó khăn:

* Nhà trường:

Nhà trường đã tạo điều kiện tối đa nhưng vì nhiều lý do nên cơ sở vật chất

để có thể học tốt môn tin học chưa đáp ứng được nhu cầu của học sinh

* Giáo viên:

Tài liệu của môn tin học trong nhà trường khá ít do đó gây khó khăn cho việc nâng cao trình độ

Đời sống giáo viên còn nhiều khó khăn nên việc tập trung tối đa cho môn học cũng bị ảnh hưởng

* Học sinh:

Lập trình có đặc trưng riêng so với các môn học khác nên sự tiếp cận của học sinh khá khó khăn

Nhiều học sinh yêu thích và đam mê lập trình nhưng điều kiện kinh tế gia đình chưa đủ để các em có thể chuyên tâm học tập

Tư tưởng học để thi đại học vẫn còn nặng trong học sinh nên thời gian học dành cho sự đam mê môn tin học là không đủ

2.3 Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải quyết vấn đề.

Khái niệm số nguyên tố (prime number): Số nguyên tố là số nguyên dương

chỉ chia hết cho 1 và chính nó Từ đó suy ra số một không phải là một số nguyên

tố (có rất nhiều em mới học lập trình nhầm số 1 là số nguyên tố) Một kết quả khác cũng không kém quan trọng được rút ra đó là số 2 là số nguyên tố đầu tiên (nhỏ nhất) và cũng là số số nguyên tố chẵn duy nhất

2.3.1 Kiểm tra tính nguyên tố của số nguyên dương.

a Kiểm tra tính nguyên tố của một số nguyên dương

Để kiểm tra một số nguyên dương N có là số nguyên tố hay không ta kiểm tra xem N có tồn tại số nguyên k sao cho k là ước của N hay không? Nếu tồn tại số nguyên k thì N không phải số nguyên tố ngược lại N là số nguyên tố

Ta có thể tìm số k bằng cách lấy N chia cho các số từ 2 cho đến N-1 Nếu

N không phải số nguyên tố thì N có thể phân tách N= k 1 xk 2 với 2≤ k1≤ k 2< N−1

không cần kiểm tra từ 2 đến N-1

Ta có đoạn chương trình sau:

function ngto(n:longint):boolean;

var k :longint;

begin

Trang 5

if n=1 then exit(false);

for k:=2 to trunc(sqrt(n)) do

if (n mod k=0) then exit(false); exit(true);

end;

Hàm ngto(n) kiểm tra lần lượt các nguyên trong đoạn [2,N] để giảm thiểu

số cần kiểm tra ta có nhận xét: Để kiểm tra số N là số nguyên tố hay không ta kiểm tra xem có tồn tại số nguyên tố k (2≤ k≤N) mà k là ước của N Nếu tồn tại

k thì N không phải số nguyên tố ngược lại thì N là số nguyên tố Để tránh việc phải kiểm tra k có phải là số nguyên tố hay không ta có thể dựa vào một trong hai tính chất đơn giản của số nguyên tố sau:

1 Trừ 2 các số nguyên tố đều lẻ

2 Trừ số 2, 3 các số nguyên tố có dạng 6k ± 1

Do vậy kiểm tra số N có phải là số nguyên tố hay không ta chỉ cần kiểm tra xem N có chia hết cho số 2, số 3 và các số có dạng 6k ± 1 trong khoảng [5,N]

Ta có đoạn chương trình sau:

function ngto(n:longint):boolean;

var k,sqrt_n:longint;

begin

if (n=2)or(n=3) then exit(true);

if (n=1) or (n mod 2=0) or (n mod 3=0) then exit(false); sqrt_n:=trunc(sqrt(n));

k:=-1;

repeat

inc(k,6);

if (n mod k=0)or(n mod (k+2)=0) then break;

until k>sqrt_n;

exit(k>sqrt_n);

end;

b Liệt kê các số nguyên tố trong đoạn [1,N]

Ta có thể dùng hàm ngto(n) để kiểm tra lần lượt các số trong đoạn [1,N]

Đoạn chương trình:

For i := 2 to N do

If ngto(i) then write(i);

Cách này là cách đơn giản nhưng chạy chậm nên ta cải tiến bằng cách sử dụng sàng nguyên tố Cách làm được thực hiện như sau:

Trước tiên xóa số 1 ra khỏi tập số nguyên tố Số tiếp theo là số 2 là số nguyên tố ta xóa tất cả các số là bội của 2 Số đầu tiên sau số 2 không bị xóa là

số 3 ta lại xóa tất cả các số là bội của 3…thuật toán tiếp tục đến khi gặp số nguyên tố lớn hơn √N thì dừng lại Các số chưa bị xóa là các số nguyên tố

Ta có đoạn chương trình sau:

Const max=10000;

Trang 6

Procedure sangngto(N:longint);

Var i,j: longint

A: array[1 max] of byte;

Begin

fillchar(a,sizeof(a),0);

for i:=2 to trunc(sqrt(N)) do

if a[i]=0 then

begin

j:=i*i;

while j<=N do

begin

a[j]:=1;

j:=j+i;

end;

end;

for i:=2 to N do

if a[i]=0 then writeln(i);

end;

2.3.2 Phân tích một số thành tích các thừa số nguyên tố.

Theo định lý cơ bản của số học: Mọi số nguyên dương đều có thể biểu diễn

duy nhất thành tích của các số nguyên tố.

Hệ quả: Mọi số tự nhiên N>1 đều có thể biễu diễn duy nhất dưới dạng chuẩn tắc

với p1< p2<…<ps

Ta có bài toán: Cho một số nguyên dương N (2<N<109) hãy phân tích N thành tích các thừa số nguyên tố

Ví dụ:

Bai.inp Bai.out

3^1 7^1

Thuật toán:

Dùng một mảng để lưu lũy thừa Mảng này có giá trị các phần tử ban đầu đều bằng 0 Cho i chạy từ 2 đến √NNếu n chia hết cho i thì tăng a[i] lên 1

Khi in kiểm tra: Nếu a[i] >0 thì in i^a[i]

Chương trình

Const fi='bai.inp';

fo='bai.out';

Var n, i,s,j : longint;

a:array[2 100000]of longint;

Trang 7

f1,f2:text;

BEGIN

Assign(f1,fi);Reset(f1);

Assign(f2,fo);Rewrite(f2);

Read(f1,n);

i:=2;a[2]:=0;

While n<>1 do

begin

While n mod i<>0 do

begin

i:=i+1;

a[i]:=0;

end;

a[i]:=a[i]+1;

n:=n div i;

end;

For j:=2 to i do

If a[j]>0 then writeln(f2,j,'^',a[j]);

Close(f1);

Close(f2);

END.

Khi N được phân tích thành thừa số nguyên tố như sau:

N= p1k1 × p2k 2 × …× p s ks

Ta có các kết luận sau:

1 Số các ước của N là: (k 1+1)×(k 2+1)×…×(ks+1)

2 Tổng các ước của một số

¿( p¿¿1p¿¿k 1−1)

1 −1 ×

( p2k 2−1)

p2−1 × …× ( p¿¿p s¿¿s−1ks−1)¿¿¿¿

2.3.3 Một số ví dụ.

Dựa vào tính chất nguyên tố của một số nguyên dương và việc phân tích một số thành tích của các thừa số nguyên tố tối có một sô bài tập sau:

Bài toán 1: Số gần nguyên tố

Chúng ta đều biết số nguyên tố là số nguyên dương mà chỉ có duy nhất 2 ước phân biệt Mạnh luôn thích những cái đặc biệt và mới mẻ, và anh ra đưa ra 1 định nghĩa mới “Số gần nguyên tố” – là các số nguyên dương mà có đúng 3 ước phân biệt

Yêu cầu: Cho 1 mảng có n phần tử, hãy cho biết có bao nhiêu phần tử trong

mảng là số gần nguyên tố

Dữ liệu vào: Từ file văn bản BAI1.INP

- Dòng đầu tiên: Số tự nhiên n (1 ≤ n ≤ 106) là số phần tử của mảng

Trang 8

- Dòng tiếp theo: Gồm n số nguyên dương x[i] (1 ≤ x[i] ≤ 109).

Dữ liệu ra: Ghi ra file văn bản BAI1.OUT: Số phần tử trong mảng là số gần

nguyên tố

Ví dụ:

3

Thuật toán:

Đối với bài toán này nếu chúng ta duyệt lần lượt để tìm các ước của X thì

sẽ rất chậm và không đủ thời gian theo yêu cầu Do vậy ta thấy rằng nếu X mà được phân tích thành tích các thừa số nguyên tố X = p1k 1 × p2k 2 ×…× p s ks thì tổng các ước là (k 1+1)×(k 2+1)×…×(ks+1) Theo đề bài thì số gần nguyên tố chỉ có đúng 3 ước do đó X chỉ có thể phân tích thành X = p12

Vậy X là số gần nguyên tố thì X phải là một số chính phương

Chương trình:

var f1,f2:text;

i,j,d,kq,n: longint;

function ngto(k:longint):boolean;

var j1:longint;

kt:boolean;

begin

j1:=2;kt:=false;

if k>1 then

begin

while (j1<=sqrt(k)) and (k mod j1<>0) do inc(j1);

if j1> sqrt(k) then kt:=true;

end;

ngto:=kt;

end;

begin

assign(f1,'bai1.inp'); reset(f1);

assign(f2,'bai1.out'); rewrite(f2);

readln(f1,n);kq:=0;

for j:=1 to n do

begin

read(f1,i);

d:=trunc(sqrt(i));

if (sqr(d)=i) and ngto(d) then inc(kq);

end;

write(f2,kq);

close(f1);

Trang 9

end.

Bài toán 2: Phân tích

Phân tích N! thành tích của các thừa số nguyên tố

Ví dụ: 15! = 211.36.53.72.11.13

Thuật toán:

Ta sẽ tìm cách phân tích n! ra thừa số nguyên tố Các ước số nguyên tố của n! chỉ nằm trong phạm vi từ 2 đến n, do đó ta duyệt qua tất cả các số nguyên

tố trong phạm vi này Với số nguyên tố p, số mũ của nó trong biểu diễn nguyên

tố của n! bằng công thức:

p]+[ n

p2]+[ n

p3]+…

Trong đó [n/p] ký hiệu phần nguyên của n/p, nói cách khác trong ngôn ngữ Pascal [n/p] bằng n div p Công thức trên được giải thích như sau: [n/p] là

số lượng số từ 1 đến n chia hết cho p, [n/p2] là số lượng số từ 1 đến n chia hết cho p2, mỗi số này đều đóng góp một thừa số nguyên tố p phân biệt cho n!

Ví dụ, với N = 15, p = 2 và kí hiệu : là phép chia nguyên, ta tính được

15 : 2 = 7; 7 : 2 = 3; 3 : 2 = 1; 1 : 2 = 0 Do đó k = 7+3+1+0 = 11

Với N=15, p = 5 ta tính được 15 : 5 = 3; 3 : 5 = 0 Do đó k = 3+0 = 3

Với N=15, p = 7 ta tính được 15 : 7 = 2; 2 :7 = 0 Do đó k = 2+0 = 2

Với N=15, p = 11 ta tính được 15 : 11 = 1; 1 : 5 = 0 Do đó k = 1+0 = 1

Với N=15, p = 13 ta tính được 15 : 13 = 1; 1 : 5 = 0 Do đó k = 1+0 = 3

Như vậy 15! = 211.53.72.11.13

Chương trình:

function ngto(n: longint): boolean;

var i: longint;

begin

nguyento:=false;

for i:=2 to trunc(sqrt(n)) do

if n mod i = 0 then exit;

ngto:=true;

end;

var

n,i,j,a: longint;

begin

readln(n);

for i:=2 to n do if ngto(i) then

begin

a:=0;

j:=i;

Trang 10

while (j<=n) do

begin

a:=a+n div j;

j:=j*i;

end;

write(i,'^',a,'.');

end;

readln

end.

Bài toán 3: SỐ ƯỚC

Cho số nguyên dương N Giai thừa của N, kí hiệu là N!, là tích của các số

tự nhiên từ 1 đến N Gọi T là số lượng ước lớn hơn 1 của N! Ví dụ với N = 4, ta

có 4! = 24 Như vậy 4! có 7 ước lớn hơn 1 là: 2, 3, 4, 6, 8, 12, 24

Yêu cầu: Cho N, hãy xác định T

Dữ liệu: Vào từ file văn bản SOUOC.INP trong đó chứa duy nhất số N (N <45, trong đó 50% số test có N <20)

Kết quả: Ghi ra file văn bản SOUOC.OUT số T tìm được

Ví dụ:

Thuật toán:

Tương tự thuật toán bài trên

Chương trình

function ngto(n: longint): boolean;

var i: longint;

begin

nguyento:=false;

for i:=2 to trunc(sqrt(n)) do

if n mod i = 0 then exit;

ngto:=true;

end;

var

n,i,j,a,d: longint;

f1,f2:text;

begin

assign(f1,'souoc.inp'); reset(f1);readln(f1,n);

assign(f2,'souoc.out'); rewrite(f2);

d:=1;

for i:=2 to n do if ngto(i) then

begin

a:=0;

j:=i;

Ngày đăng: 31/10/2019, 14:08

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w