Bài toán rất dễ (dễ sai)

Em có code một bài như sau:

Nếu chúng ta liệt kê tất cả các số tự nhiên dưới 10 là bội số của 3 hoặc, ta sẽ nhận được các số: 3 5 6 và 9. Tổng của những buội số đó là 23. Yêu cầu đề bài tìm tổng của tất cả các số tự nhiên của 3 hoặc 5 nhỏ hơn 1000.

Dưới đây là code của em, khi nộp bài, em rất hốt hoảng là tại sao kết quả của mình lại sai một cách tự tin đến thế. Mong các anh giúp em tìm ra lỗi giúp em :smiley: (Kết quả chính xác là 233168)

    while (3*k < 1000) and (5*k < 1000)
    do
    begin
    if (3*k < 1000) then tong:= tong + 3*k;
    if (5*k < 1000) then tong:= tong + 5*k;
    k := k + 1;
    end;
1 Like

Bởi vì bạn cộng hai lần cho số vừa là bội của 3 vừa là bội của 5, ví dụ như 15

1 Like

và vì điều kiện là and nên sai thêm sai

Cảm ơn bạn nhiều lắm :smiley:

Cảm ơn bạn, Khôi :smiley:

Bài này làm trong O(1) thôi
Gọi F(x,n) là tong cac số nằm [0;x] chia hết cho n
F(x,n) = n*(x/n+1) * (x/n) / 2
Tong Các số < x chia hết cho n = F(x-1,n)

Từ đó có kq bài toán = F(999,3)+F(999,5)-F(999,15) = 233168

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?