Viết chương trình giải bài toán sau bằng ngôn ngữ lập trình Pascal: Nhân dịp khai giảng năm học mới, một nhà từ thiện đã mua X quyển vở để tặng cho các học sinh có hoàn cảnh khó khăn của một trường nào đó nơi ông sống. Tại đây có n ngôi trường, trường thứ i có a i học sinh có hoàn cảnh khó khăn (1<=ai<=X,I=1,2..n) . Nhà từ thiện muốn chọn ra một trường nào đó sao cho khi đem số vở ông đã mua ra chia đều cho tất cả các học sinh có hoàn cảnh khó khăn của trường đó thì vừa đủ. Nhưng khi ông thử lần lượt từ trường thứ nhất đến trường thứ n thì khi đem số vở ra chia đều cho tất cả học sinh khó khăn của bất kỳ một trường nào đều thấy thừa k quyển (k<X;0<=X<ai;i=1,2,..n). Yêu cầu: Hỏi nhà từ thiện đã mua ít nhất bao nhiêu quyển vở Dữ liệu vào: Tệp TUTHIEN.INP gồm 2 dòng:  Dòng 1: Ghi hai số nguyên dương n và k (2<=n<=50,k<=50), hai số cách nhau đúng 1 kí tự trống  Dòng 2: Ghi n số nguyên dương a 1 , a 2 , ..., a n (ai<=50,i=1,2...n) . Hai số liền nhau cách nhau đúng 1 kí tự trống Dữ liệu ra: Tệp TUTHIEN.OUT gồm 1 dòng ghi số nguyên dương X là số vở ít nhất mà nhà từ thiện đã mua. Ví dụ: TUTHIEN.INP TUTHIEN.OUT 3 2 14 3 4 6 giúp em với ạ gấp lém

2 câu trả lời

type int = longint;
var i,n,k,b,a:int;
function bcnn(a,b:int):int;
var tmp:int;
begin
    tmp:= a*b;
    if tmp = 0 then exit(a+b);
    while a*b <> 0 do
        begin
            a:=a mod b;
            if a <> 0 then
                b:=b mod a;
        end;
    exit(tmp div (a+b));
end;
begin
    readln(n,k);
    b:=0;
    for i:=1 to n do
        begin
            read(a);
            b:=bcnn(a,b);
        end;
    writeln(b+k);
end.

function bcnn(x,y:longint):longint;
  var tmp,t : longint;
  begin
   t:=x*y;
    while y > 0 do
  begin tmp := x mod y;
         x := y;
         y := tmp;
end;
 exit(t div x);
end;
var a : array[0..10000007] of int64;
    d,k,n:int64;
    i : longint;
begin
assign(input,'tuthien.inp');reset(input);
assign(output,'tuthien.out');rewrite(output);
readln(n,k);
for i := 1 to n do read(a[i]);
d := a[1];
for i := 2 to n do
d := bcnn(d,a[i]);
writeln(d+k);
close(input);close(output);
end.

Câu hỏi trong lớp Xem thêm