Bailian2686 打印完数暴力

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian2686 打印完数暴力相关的知识,希望对你有一定的参考价值。

2686:打印完数
总时间限制: 1000ms 内存限制: 65536kB
描述
一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子:

6 its factors are 1,2,3
输入
无输入
输出
输出1000以内所有的完数及其因子,每行一个完数。
样例输入
样例输出
来源
计算概论05

问题链接Bailian2686 打印完数
问题简述:(略)
问题分析
  按Markdown格式重写了题解,旧版题解参见参考链接。
  优化的方法是素数打表,用素数去试除。这里使用的是暴力法。解题程序可以写一个函数来计算因子之和,也可以直接计算。
程序说明:(略)
参考链接Bailian2686 打印完数【暴力】
题记:没有找到好算法,暴力法就是最好的办法。

AC的C语言程序(因子之和函数)如下:

/* Bailian2686 打印完数 */

#include <stdio.h>

#define N 1000
int ans[N / 3], cnt;

int psum(int n)
{
    int i, sum = 1;
    for (i = 2, cnt = 0; i < n; i++)
        if (n % i == 0) sum += i, ans[cnt++] = i;
    return sum;
}

int main(void)
{
    int i, j;
    for (i = 2; i <= N; i++) {
        if (psum(i) == i) {
            printf("%d its factors are 1", i);
            for (j = 0; j < cnt; j++)
                printf(",%d", ans[j]);
            printf("\\n");
        }
    }

    return 0;
}

AC的C语言程序如下:

/* Bailian2686 打印完数 */

#include <stdio.h>

#define N 1000
int ans[N / 3], cnt;

int main(void)
{
    int i, j;
    for (i = 2; i <= N; i++) {
        int sum = 1;
        for (j = 2, cnt = 0; j < i; j++)
            if (i % j == 0) sum += j, ans[cnt++] = j;
        if (sum == i) {
            printf("%d its factors are 1", i);
            for (j = 0; j < cnt; j++)
                printf(",%d", ans[j]);
            printf("\\n");
        }
    }

    return 0;
}

以上是关于Bailian2686 打印完数暴力的主要内容,如果未能解决你的问题,请参考以下文章

数字之谜1——质(素)数续详细讲解“打印一千以内的所有完数”~~

数字之谜1——质(素)数续详细讲解“打印一千以内的所有完数”~~

python3 练习题100例 (二十四)打印完数

Bailian2685 打印水仙花数进制+宏定义

求N以内的所有完数 C语言 看清楚题再回答!!! 请经过测试以后再回答!!!

蓝桥杯 算法训练 ALGO-152 8-2求完数