Chỉ cần viết hàm tổng thôi rồi kiểm tra xem nó có bằng chính nó không.
Cộng các ước số của nó lại nếu bằng nó thì là số hoàn hảo !
Chỉ cần viết hàm tổng thôi rồi kiểm tra xem nó có bằng chính nó không.
Cộng các ước số của nó lại nếu bằng nó thì là số hoàn hảo !
Này bạn nếu như bạn đã có công thức trên sao bạn ko áp dụng vô, chạy được với dữ liệu lớn, còn cách của bạn còn phải tìm ước số của số đó rồi cộng vào. Liệu hỏi làm bài trên pascal chạy được bao nhiêu, nhanh hay chậm. Nếu như khi đi thi mình nghĩ cách này thật ko hay chút nào.
Mình nghĩ đó chắc chắn là số hoàn chỉnh, đây là công thức khá hay, mình mới gặp lần đầu.
Định nghĩa số hoàn hảo: Là số tự nhiên lớn hơn 1 có tổng các ước (không kể chính nó) bằng chính nó.
CÓ một TC của S(n) (hàm tổng các ước của n) là S(p)S(q)=S(pq) nếu p,q nguyên tố cùng nhau. Từ đó có thể kiểm tra ngay công thức 2^{n-1}(2^n-1).
Việc chứng minh công thức này cho mọi số hoàn hảo chẵn nói chung cũng khá đơn giản. Hiện tại chưa tìm đc số hoàn hảo lẻ. Có giả thuyết là ko tồn tại, và giả thuyết này là mở. Thỉnh thoảng cũng có một vài người tuyên bố là tìm đc số hoàn hảo lẻ nào đấy nhưng sau đó check lại đều sai cả.
bạn muốn biết công thức này có chính xác hay không bạn thử dùng phương pháp quy nạp để chứng minh.
ngoài ra bạn có thể viết chương trình:
- tìm tất cả các ước của một số N bất kì
- tính tổng tất cả các ước số đó( trừ N ra)
if N==tổng các ước)
Console.Write(" N là số hoàn hỏa");
else
Console.Write(" N là ko phải là số hoàn hỏa");
Theo em thì làm theo công thức đó thì mang tính chất toán học quá, hơn nữa công thức đó chỉ liệt kê ra các số hoàn chỉnh là số chẵn. Còn người ta vẫn chưa chứng minh được có tồn tại số hoàn chỉnh lẻ hay không
Do vậy theo ý kiến của em thì nên viết theo kiểu tin học: Tính tổng các ước của n rồi so sánh với n
Ừm, nhưng mà mình là dân Tin cũng phải có cái đầu của dân toán thì mới giải bài toán-tin mới được chứ. Cách làm của bạn cũng được nhưng có kết quả đúng thì chưa chắc đã là bài làm tốt (dối với bộ môn Tin học là vậy) mà bài làm còn phải chạy được với dữ liệu lớn nữa. Cho nên theo mình thì mình vẫn thích đùng công thức trên để làm hơn, còn ý kiến của bạn cũng có lí lắm.
Theo ý kiến của mình thì những bài khó về tin nó thuộc những dạng khác: tham lam, quy hoạch động hay đồ thị. Còn với những bài toán liệt kê thì mình vẫn phải làm theo cách liệt kê bởi vì đâu phải lúc nào ta cũng có toàn bộ kiến thức toán để giải những bài toán tối ưu liệt kê. Chẳng hạn như khi phải tìm một hoán vị thỏa mãn điều kiện nào đó, bạn vẫn phải thử hết (tât nhiên có thể dùng nhánh cận để giảm bớt khả năng) các trường hợp
Trong bài này cũng vậy, theo mình thì đây thuộc bài toán cổ điển, tất nhiên đi thi sẽ không có loại bài này (vì nó quá cổ điển, đã có rất nhiều nhà khoa học nghiên cứu về loại số này, nhiều người còn cho rằng nếu tìm ra được một số hoàn hảo thì sẽ được hạnh phúc cả đời nên đã có rât nhiều người tìm các số hoàn hảo) -> không cần phải lo nghĩ đến việc chạy dữ liệu lớn. Do đó nếu mình làm với ý nghĩa là một bài tin học thì nên liệt kê mọi khả năng. Hơn nữa, như đã nói ở trên, toán học chưa thể chứng minh là không có số hoàn hảo lẻ và công thức trên cũng chỉ cho ra các số hoàn hảo chẵn. Và công thức trên còn liên quan đến việc kiểm tra số nguyên tố lớn, nếu bạn muốn chạy với dữ liệu lớn thì riêng việc kiểm tra số nguyên tố cũng đã đủ mệt rồi
Có gì sai sót mong các bạn thông cảm
Bạn nói đúng lắm, mình xin ghi nhận ý kiến này.
Hihi nói bừa thôi mà
Bookmarks