1. Trang chủ
  2. » Công Nghệ Thông Tin

Phân tích giải thuật bài toán phân tích số

21 3K 11
Tài liệu đã được kiểm tra trùng lặp

Đ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 21
Dung lượng 79,5 KB

Nội dung

Phân tích giải thuật bài toán phân tích số

Trang 1

Các bài toán phân tích số

Cao Minh Anh

Trong quá trình học chắc các bạn sẽ gặp rất nhiều các bài toán về phân tích số Các bài này có rất nhiều dạng khác nhau Sau đây tôi xin đề cập đến một số bài toán để cùng trao đổi với các bạn

Bài 1: Cho số nguyên dương M(M<=232),tìm cách phân tích M ra các số nguyên dương khác nhau có tổng bằng M sao cho tích của chúng là lớn nhất

Trang 2

+ Bây giờ ta tưởng tượng ta đang có d hạt đậu, chúng ta bắt đầu rải từng hạt đậu vào các a[I](1<=I<=k) theo chiều từ k1 Nếu rải đến 1 mà vẫn còn thì ta vẫn rải lại bắt đầu từ k lại,cứ như thế cho đến khi không còn hạt đậu nào Khi rải đậu đến ô nào thì tăng giá trị của ô đó lên

Sau đó xuất mảng a[i] ra là giải quyết xong bài toán

Xong trên chỉ là tư tưởng của thuật toán trên, nếu làm theo cách đó thì ta sẽ tốn nhiều thờigian và dữ liệu Sau đây tôi xin giới thiệu một cách cài đặt giúp tăng thời gian và giảm dửliệu:

Ở bước một ta tìm K lớn nhất cho a[1]+a[2]+ +a[k]<=M

+ Giải phương trình:2+3+4+ +(k-1)<=M

<-> k(k-1)/2 <=M-1

Giải phương trình trên tìm nghiệm k nguyên trong khoảng nghiệm là được

Bước hai: Thay vì mỗi lần ta rãi 1 hạt, mà ta rải (d div k) hạt đậu từ a[k]àa[1] (Với d là sốhạt đậu còn lại, k là số ô để ta bỏ đậu vào), sau đó sẽ còn dư (d mod k) ta lại rải lại từ cuối đến đầu Như vậy chỉ mất 2 lần

Trang 4

du:=M+1-(k*(k+1) div 2);end;

Trang 5

Với cách làm trên ta có thể xử lý rất nhanh,vừa đỡ dữ liệu.Sau đây là một bài khác.

Bài 2: Phân tích số đòi hỏi đưa ra tất cả các cách có thể có.

+Với những bài như trên thì dữ liệu vào sẽ nhỏ,và phương pháp đơn giản nhất là duyệt

Ví dụ: Cho một số n.Hãy đưa ra tất cả các cách phân tích n ra các số nguyên tố có thể

giống nhau sao cho tổng của chúng bằng n

Trang 6

If n mod i=0 then exit;

Trang 7

Từ bài trên có thể chuyển qua rất nhiều bài như sau:

+Phân tích n ra các số nguyên tố khác nhau

Trang 8

Bài toán: Cho một số n<=2000 hãy tìm số cách phân tích n thành các số nguyên tố có thể giống nhau sau cho tổng của chúng bằng n.

Khởi tạo: Fx[i]=1 nếu i là số nguyên tố

Khi xét các số nguyên tố p từ 2 n thì ta luôn có:

Trang 9

var n,k,dem :longint;

Fx :array[0 2000] of ^arr;Donvi :arr;

Trang 11

for i:=2 to n do

if nto(i) then

begin

Cong(Fx[i]^,donvi,Fx[i]^);for j:=i+2 to n do

Cong(Fx[j]^,Fx[j-i]^,Fx[j]^);end;

Trang 13

+Dạng 2: Với lớp bài toán phân tích n ra các số (hay nguyên tố) có thể giống nhau nhưng

Trang 14

Gọi Fx[i] là số cách tạo thành i;

Khởi tạo:Fx[i]=1 với 1<=i<=n

Vì lặp lại vẫn được nên ta có công thức sau:

For h:=1 to n-i do

Fx[i+h]:=Fx[i+h]+Fx[i];

Tổng quan như sau:

For i:=1 to n do fx[i]:=1;

type arr=array[1 200] of byte;

var n,k,dem :longint;

Trang 16

var i,du :integer;

Trang 20

Ví dụ:

N=5 có 3 cách là:

Trang 21

1 4

2 3 5

Ngày đăng: 07/09/2012, 10:53

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w