Mình vừa đọc qua một bài toán trên mạng có nội dung như sau:
- Tính tổng tất cả các số 0->999 chia hết cho 3 hoặc 5
Mình nghĩ ngay tới đoạn code:
#include "stdio.h"
int main(int argc, char const *argv[])
{
int s, i = 0;
while (i<1000){
if (i % 3 == 0 || i % 5 == 0){
s += i;
}
i++;
}
printf("%d\n", s);
return 0;
}
Nhưng tác giả nói rằng cách này không tối ưu và đoạn code của a ta là:
#include "stdio.h"
int sum(int n){
int target = 999;
int p = target/n;
return n*(p*(p+1))/2;
}
int main(int argc, char const *argv[])
{
printf("%d\n", sum(3) + sum(5) - sum(15));
return 0;
}
Vậy liệu nó có thực sự tối ưu hơn đoạn code của tôi? Và phải chăng còn có đoạn mã tối ưu hơn nữa cho bài toán đơn giản này? Mong các bạn giải đáp thắc mắc dùm mình. Cảm ơn rất nhiều!