PDA

View Full Version : Phân tích số



hoasentrang_cm
08-03-2014, 12:09
Cho số tự nhiên N (N<590) phân tích số N thành tổng các số tự nhiên khác nhau sao cho tích của chúng là lớn nhất

megaownage
10-03-2014, 10:45
Tiếp tục chẻ hai cho đến số 4 thì dừng lại. Nếu số chẵn thì chẻ đúng 2, sô lẻ thì cho số này lớn hơn số kia 1.
Lý do: Số 4 là số bảo hòa, chẻ 2 ra thành 2x2 thì cũng là 4. Nhỏ hơn 4, số 3 chẻ 2 là 2x1 = 2, nhỏ hơn 3 cho nên không nên chẻ. Lớn hơn 4, số 5 chẻ thành 3x2 = 6, lơn hơn 5, tức là chẻ được.

ksc10
13-03-2014, 11:32
Giới hạn bài này có thể mở tẹt ga lên cỡ 1e6. (đáp án thì phải tính modulo cái gì đó).

hoasentrang_cm
20-03-2014, 10:43
Bạn có thể nói rõ hơn về thuật toán được không?

ksc10
20-03-2014, 10:47
Bạn có thể nói rõ hơn về thuật toán được không?
Nếu chia nhỏ số 4 ra, ta đẩy đc lên 1e9.
Bạn nghĩ thế nào?

congdaittb
02-04-2014, 10:14
Tiếp tục chẻ hai cho đến số 4 thì dừng lại. Nếu số chẵn thì chẻ đúng 2, sô lẻ thì cho số này lớn hơn số kia 1.
Lý do: Số 4 là số bảo hòa, chẻ 2 ra thành 2x2 thì cũng là 4. Nhỏ hơn 4, số 3 chẻ 2 là 2x1 = 2, nhỏ hơn 3 cho nên không nên chẻ. Lớn hơn 4, số 5 chẻ thành 3x2 = 6, lơn hơn 5, tức là chẻ được.
ở đây là tổng các số khác nhau cơ mà bác
theo e bài này có thể giải quyết như sau:
+ Tìm các số từ k lớn nhất sao cho tổng các số từ 2>k nhỏ hơn hoặc bằng N
+ Nếu chưa bằng thì tăng N-K các số từ bên phải sang lần lượt lên 1 đơn vị
ví dụ:
ví dụ số N = 18
ta tìm được số K = 5 ở đây là vì
2 + 3 + 4 +5 = 14 <=18
giờ ta tăng 18-14 = 4 số từ bên phải sang ta sẽ được
3 + 4 + 5 + 6 = 18
đó là thuật toán

Long_Phung
03-04-2014, 02:10
ở đây là tổng các số khác nhau cơ mà bác
theo e bài này có thể giải quyết như sau:
+ Tìm các số từ k lớn nhất sao cho tổng các số từ 2>k nhỏ hơn hoặc bằng N
+ Nếu chưa bằng thì tăng N-K các số từ bên phải sang lần lượt lên 1 đơn vị
ví dụ:
ví dụ số N = 18
ta tìm được số K = 5 ở đây là vì
2 + 3 + 4 +5 = 14 <=18
giờ ta tăng 18-14 = 4 số từ bên phải sang ta sẽ được
3 + 4 + 5 + 6 = 18
đó là thuật toán

Nếu giả sử là 30?
thì dãy số xác định ra sao????

ko lẽ
2+3+4+5<30
30-14=16 ko lẽ là 16 số bên phải sang??

rất khó hiểu..

ksc10
05-04-2014, 20:49
@2^ Làm kiểu đó mà cho N=23 thì làm thế nào?

chienphuninh
08-04-2014, 08:27
var a:array[1..100] of longint;
n,i,j,k,tong,du,m:longint;
begin
n:=21;
{if n mod 2 = 0 then
begin
i:=2;
k:=1;
while tong+i <= n do
begin
a[k]:=i;
tong:=tong+a[k];
i:=i+1;
k:=k+1;
end;
end;
writeln;
j:=n-tong;
k:=k-1; m:=k;
while j>0 do begin
a[k]:=a[k]+1;
k:=k-1;
j:=j-1;
end;
for i:=1 to m do write(a[i],' '); }
if n mod 2 <> 0 then
begin
i:=2;
k:=1;
while tong+i <= n do
begin
a[k]:=i;
tong:=tong+a[k];
write(a[k],' ');
i:=i+1;
k:=k+1;
end;
end;
writeln;
j:=n-tong;
k:=k-1; m:=k;
if j>k then begin du:=j-k;a[k]:=a[k]+du+1;
j:=j-du-1;
k:=k-1;
while (j>0) do begin
a[k]:=a[k]+1;
k:=k-1;
j:=j-1;
end;
end
else while (j>0) do
begin
a[k]:=a[k]+1;
k:=k-1;
j:=j-1;
end;
writeln;
for i:=1 to m do write(a[i],' ');
end.