c语言简单运用简单运用

如何解决答二的运行超时问题,急
https://ask.csdn.net/questions/7549761?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164877980816780255235953%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164877980816780255235953&biz_id=4&utm_medium=distribute.pc_search_result.none-task-ask_topic-2~all~first_rank_ecpm_v1~rank_v31_ecpm_bkp-2-7549761.142^v5^pc_search_quality_down&utm_term=7-134+%E5%88%97%E5%87%BA%E5%AE%8C%E6%95%B0+%2810+%E5%88%86%29&spm=1005.2026.3001.5622

供参考:

#include <stdio.h>
int isperfect(int n)
{
    int i, s;
    if (n < 6) return 0;
    for (i = 2, s = 1; i <= n / 2; i++)
        if (n % i == 0)   s += i;
    return s == n;
}

int main()
{
    int N, i, n;
    while (1)
    {
        if (scanf("%d", &N) != 1)  break; //ctrl + z 结束输入
        printf("%d:", N);
        for (i = 1, n = 0; i <= N; i++)
            if (isperfect(i))
                printf(n++ == 0 ? "%d" : " %d", i);
        if (!n)
            printf("NULL");
        printf("\n");
    }
    return 0;
}

10000以内的完数一共就4个,一位数一个,2位数一个,3位数一个,4位数一个
你判断输入的范围,直接print就行了,根本不用算

if(n<=5)
printf("NULL");
其余类推,保证不超时