01/10/2018, 00:22
In ra các số hoàn hảo bé hơn N
Chuyện là em có code 1 bài tìm số hoàn hảo bé hơn N , nhập các số nhỏ thì thì nó vẫn in ra các số hoàn hảo bình thường, nhưng nhập số to thì chỉ output ra tới 4 số và chạy không nổi nữa .
Em mới học lập trình nên code còn tù , có ai cho em cách giải quyết không ạ.
#include<iostream>
using namespace std;
int main()
{
long long n,sum;
cout << "Enter your number: "; cin >> n;
for ( int number = 1;number <= n;number++)
{
sum =0;
for (int i = 1 ; i <= number;i++)
if (number%i==0)
sum+=i;
if (sum/2.0 == number)
cout << number << endl;
}
return 0;
}
Bài liên quan
5 số hoàn hảo đầu tiên là 6, 28, 496, 8128, 33550336
hiểu lý do vì sao nó chậm rồi ha :3 đơn giản vì nó cực kì hiếm và chẳng có bao nhiêu cả
vậy có cách nào để xuất được số hoàn hảo trên 4 mà máy có thể chạy nổi không
Vì nó ít nên chỉ cần tạo sẵn một mảng ra rồi dò theo N :>
input kiểu long, for thì kiểu int nên nó giới hạn tới 32… kiểu in thôi. sửa code lại thì nó sẽ chạy nổi thôi. chỉ là sẽ chậm. cách hay là như bạn ở trên viết lên mạng search ra rồi tạo mảng so sánh kaka. bao nhanh.
Bài này bạn có thể cho chạy biến đếm i rồi check nếu 2^i-1 là số nguyên tố thì in ra số hoàn hảo là 2^(i-1)*(2^i-1)
Vì đơn giản là cắm đầu chạy từ 1 đến N thì sao mà không lâu
Thực ra bài này không tiêu biểu lắm, nếu hỏi tổng các ước số thì sẽ thuyết phục hơn là hỏi kiểu này (vì lưu mảng cho cùng là vô nghĩa)
Mình đóng góp một thuật toán tối ưu hơn 1 chút nhé
Thế này vẫn chưa phải là tối ưu, độ phức tạp của thuật của bạn và của bạn thớt đều là O(n) cả.
Chưa tối ưu đâu cận có thể xuống tới sqrt(N) và dấn thêm nữa thì không quá sqrt(N) luôn.
p/s: đã “tối ưu” thì không có “hơn”, “tối” là nhất rồi. Tất nhiên có thể chỉnh thêm nữa.
Oki b ^^ m xem lại đã ^^ cảm ơn b nhé ^^
Oki b ^^ :)) edit nhiều quá mình không kịp trả lời :)) đáng lẽ cái đó phải là tốt hơn thôi chứ b nhỉ :))
Thì đây là cách m mới suy nghĩ khi chủ topic đặt vấn đề :)) nên mình sẽ suy nghĩ thêm ^^ cảm ơn b nhé