Bài toán Ramanujan :
Xác minh tuyên bố này bằng cách viết một chương trình Ramanujan.cpp lấy đối số là một số nguyên n và in tất cả các số nguyên nhỏ hơn hoặc bằng n có thể được biểu diễn như là tổng lập phương theo 2 cách khác nhau.
Hint: tìm các số nguyên dương khác biệt a, b, c, và d sao cho a ^ 3 + b ^ 3 = c ^ 3 + d ^ 3. Sử dụng bốn vòng for lồng nhau.
Ví dụ, với n = 10000, ta có:
1729 = 1^3 + 12^3 = 9^3 + 10^3
4104 = 2^3 + 16^3 = 9^3 + 15^3
Suy ra, output: 1729 4104
Bài toán Euler :
Chứng minh phỏng đoán đó sai bằng cách tìm các số nguyên dương a, b, c, d và e sao cho:
a^5+b^5+c^5+d^5=e^5
Viết chương trình nhận vào từ bàn phím tham số NN và tìm kiếm vét cạn tất cả các lời giải với aa, bb, cc, dd và ee nhỏ hơn hoặc bằng NN. In các lời giải ra màn hình.
Cả 2 bài toán này mình dùng vòng lặp for chạy hết từ 1 đến n cho hết tất cả các số rồi tiến hành so sánh.
kết quả dễ đoán là chạy vào web bài tập thì gặp lỗi time limited .
Có bác nào từng làm bài này chưa, thuật toán tối ưu là gì nhỉ?