Code số hoàn hảo nhỏ hơn n bị chạy quá thời gian

M.n xem hộ em code số hoàn hảo nhỏ hơn n. thời gian là 1s mà em cứ TLE hoài

#include <stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	for( int i = 2; i <=n; i++ ){
	
	int s = 0;
	for( int j = 1; j <= i/2; j++){
		if( i % j == 0) s += j;
	}
	if( i == s ) printf("%d ", i); 
  }

}
  1. Khai báo các biến 1 lần ngoài vòng lặp, tránh khai báo lại.
  2. Tìm ước chỉ cần đến căn bậc 2 sqrt(i) thôi, không cần đến i/2.
  3. Không rõ là số cần tìm là số tính theo hướng nào?
    • Gần n nhất?
    • Số nhỏ nhất từ 0?

Trả lời được ý 3 thì bạn hiểu vòng lặp nên chạy từ đâu.

2 Likes

Tính tổng ước thì vừa phân tích TSNT vừa tính :smiley:

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