C 언어 고전 알고리즘 예제 7: 완전수

여기에 이미지 설명 삽입

1. 문제 설명

1.1 완전수란?

완전수 또는 완전수라고도 하는 완전수는 특별한 자연수입니다.
모든 실제 인수(즉, 자신 이외의 제수)의 합(즉, 요인 함수)은 자신과 정확히 같습니다.
고유 약수의 합과 정확히 같은 숫자를 "완전"하다고 합니다.
첫 번째 완전수는 6, 두 번째 완전수는 28, 세 번째 완전수는 496, 다음 완전수는 8128, 33550336 등입니다.

1.2 완전수의 정의

고유 약수의 합과 정확히 같은 숫자를 "완전"하다고 합니다. 합이 자신과 같은 자연수를 완전수라고 하며 완전수 또는 완전수라고 합니다.
예를 들어,
첫 번째 완전수는 6이고 약수는 1, 2, 3, 6이고 자신의 6을 제외하고 나머지 3개의 숫자를 더하면 1+2+3=6이 됩니다.
두 번째 완전수는 약수가 1, 2, 4, 7, 14, 28인 28입니다. 자신의 28을 제외한 나머지 5개의 숫자를 더하면 1+2+4+7+14=28이 됩니다.
세 번째 완전수는 약수가 1, 2, 4, 8, 16, 31, 62, 124, 248, 496인 496입니다. 자신의 496을 제외한 나머지 9개의 숫자를 더하면 1+2+4입니다. + 8+16+31+62+124+248=496.
다음 완전수는 8128, 33550336 등입니다.

1.3 이 문서의 문제 설명

이 문서의 끝 부분에 있는
문제에 대한 설명은
다음과 같습니다.

  1. 1-10000 사이의 모든 완전수를 출력합니다.
  2. 완전수의 모든 고유 약수(즉, 자신 이외의 약수)의 합은 자신과 정확히 같습니다.
  3. 6은 완전수이며 약수는 1, 2, 3, 6이며 6을 제외하고 나머지 3개의 숫자를 더하면 1+2+3=6입니다.

2. 알고리즘 예제 컴파일 환경

이 문서의 C 언어 클래식 알고리즘 예제의 컴파일 환경은 통합 개발 환경인 Visual Studio 2019를 사용합니다.
여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

Visual Studio 2019 공식 홈페이지 링크는 다음과 같습니다.

Visual Studio 2019 공식 웹사이트 링크
여기에 이미지 설명 삽입

Visual Studio 2019 통합 개발 환경의 기능은 다음과 같습니다.

  1. Visual Studio 2019는 기본적으로 Live Share 코드 협업 서비스를 설치합니다.
  2. 사용자가 코드를 빠르게 작성할 수 있도록 도와주는 새로운 시작 창, 향상된 검색 기능, 일반 성능 개선.
  3. Visual Studio IntelliCode AI 도움말.
  4. 더 나은 Python 가상화 및 Conda 지원.
  5. WinForms 및 WPF 등을 포함한 .NET Core 3.0 프로젝트 지원

3. 알고리즘 예제 구현 과정

3.1, 헤더 파일 포함

다음과 같이 헤더 파일 코드를 포함합니다.

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>

  • 사용될 C 언어 헤더 파일에는 최근 연도가 포함됩니다.

3.2 변수 선언

변수 선언 코드는 다음과 같습니다.

    // 声明变量
    int i, j, k; 
  • 변수 i, j, k가 선언됩니다.

3.3 for 루프를 사용하여 1-10000의 전체 수 찾기

for 루프를 사용하여 1-10000의 전체 수를 찾습니다. 코드는 다음과 같습니다.

	/// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
    
    
        
    }
  • for 루프를 사용하여 1-10000 사이에서 완벽한 숫자를 찾으십시오.
  • 1-10000에서 완전수를 찾는 구체적인 구현은 다음과 같습니다.

3.4 변수 할당

변수 할당 코드는 다음과 같습니다.

 	// 变量赋值, 保证每次循环时sum的初值为0
    int sum = 0;
  • 변수 할당은 루프가 실행될 때마다 합계의 초기 값이 0이 되도록 합니다.
  • 변수 할당은 숫자의 해를 완성하는 데 사용됩니다.
    여기에 이미지 설명 삽입

3.5 j가 i의 인수인지 확인

j가 i의 인수인지 확인하고 코드는 다음과 같습니다.

		for (j = 1; j < i; j++)
        {
    
    
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)    
            {
    
    
                sum += j;
            }
        }
  • j가 i의 인수인지 확인합니다.

3.6 요인 수의 합이 원래 수와 같은지 확인

요인수가 원래수와 같은지 판단하는 코드는 다음과 같다.

		/// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
    
    
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
    
    
                if (i % k == 0)
                {
    
    
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
  • 요인 수의 합이 원래 수와 같은지 확인합니다.
  • 약수의 합이 원래 숫자와 같으면 완벽한 숫자입니다.
  • 요인 수의 합이 원래 수와 같지 않으면 그 수는 완전하지 않습니다.

F5를 눌러 컴파일하면 디버깅 결과는 다음과 같습니다.

여기에 이미지 설명 삽입

6 的因数是: 1 2 3
28 的因数是: 1 2 4 7 14
496 的因数是: 1 2 4 8 16 31 62 124 248
8128 的因数是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064

请按任意键继续. . .

  • 1부터 10000까지 총 4개의 완전수가 있음을 알 수 있습니다.
  • 이 완벽한 숫자는
  • 6의 인수는 다음과 같습니다. 1 2 3
  • 28의 인수는 다음과 같습니다. 1 2 4 7 14
  • 496의 인수는 다음과 같습니다. 1 2 4 8 16 31 62 124 248
  • 8128의 인수는 다음과 같습니다. 1 2 4 8 16 32 64 127 254 508 1016 2032 4064

3.7 1-10000 사이에서 완전수를 찾는 기능을 위한 기능 모듈화

  • 함수 쓰기 방법을 사용하여 1-10000 내에서 완전수를 찾으십시오.

1-10000 이내의 완전수를 계산하기 위한 함수 모듈화 코드는 다음과 같다.

3.7.1 1-10000 이내의 완전수 계산 함수에 대한 함수 모듈화를 위한 함수 선언

/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();
  • 숫자를 찾는 함수를 선언합니다.

3.7.2 1-10000 이내의 완전수 계산 함수의 함수 모듈화를 위한 함수 정의

1~10000 이내의 완전수의 함수 모듈화를 위한 함수 정의 코드는 다음과 같다.

/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
    
    
    // 声明变量
    int i, j, k;

    /// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
    
    
        // 变量赋值, 保证每次循环时sum的初值为0
        int sum = 0;

        for (j = 1; j < i; j++)
        {
    
    
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)
            {
    
    
                sum += j;
            }
        }

        /// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
    
    
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
    
    
                if (i % k == 0)
                {
    
    
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
    }

    printf("\n");
}


  • 위의 함수 정의에 표시된 대로 함수 본문에 위 지점의 함수를 추가합니다.
  • 기능의 기능이 실현됩니다. 1-10000 내에서 완벽한 숫자를 찾으십시오.
  • for 루프를 사용하는 방법.
  • 1-10000 사이에서 완벽한 숫자를 찾으십시오.
  • 먼저 자신의 인수 수를 찾으십시오.
  • 요인 수의 합이 자신과 같은지 여부를 찾습니다.

3.7.3 메인 함수에서 numberPerfect 함수를 호출하여 1-10000 사이의 완전수를 계산합니다.

메인 함수에서 1~10000 사이의 완전수를 계산하는 numberPerfect 함수를 호출하는데 코드는 다음과 같다.

 	// 调用求完数的函数
    numberPerfect();

F5를 눌러 컴파일하면 디버깅 결과는 다음과 같습니다.

여기에 이미지 설명 삽입

4. 클래식 알고리즘 예제 프로그램의 전체 코드

클래식 알고리즘 예제 프로그램의 전체 코드는 다음과 같습니다.

4.1, main.h 파일

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>


/// <summary>
/// 求完数的函数声明
/// </summary>
void numberPerfect();


4.2, main.c 파일

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"

/// <summary>
/// 主函数
/// </summary>
/// <returns>返回0</returns>
int main()
{
    
    
    system("color 3E");

    // 调用求完数的函数
    numberPerfect();

    system("pause");
    return 0;
}

/// <summary>
/// 求完数的函数定义
/// </summary>
void numberPerfect()
{
    
    
    // 声明变量
    int i, j, k;

    /// <summary>
    /// 使用for循环来求1-10000的完数
    /// </summary>
    /// <returns>无</returns>
    for (i = 1; i < 10000; i++)
    {
    
    
        // 变量赋值, 保证每次循环时sum的初值为0
        int sum = 0;

        for (j = 1; j < i; j++)
        {
    
    
            /// <summary>
            /// // 判断j是否为i的因子
            /// </summary>
            /// <returns></returns>
            if (i % j == 0)
            {
    
    
                sum += j;
            }
        }

        /// <summary>
        /// 判断因子数的和是否和原数相等
        /// </summary>
        /// <returns></returns>
        if (sum == i)
        {
    
    
            printf("%d 的因数是: ", i);

            for (k = 1; k < i; k++)
            {
    
    
                if (i % k == 0)
                {
    
    
                    printf("%d ", k);
                }
            }
            printf("\n");
        }
    }

    printf("\n");
}





V. 요약

이 기사의 C 언어 클래식 알고리즘 예제: Wanshu, 달성할 목표는 다음과 같습니다.

  1. 1-10000 사이의 모든 완전수를 출력합니다.
  2. 완전수의 모든 고유 약수(즉, 자신 이외의 약수)의 합은 자신과 정확히 같습니다.
  3. 6은 완전수이며 약수는 1, 2, 3, 6이며 6을 제외하고 나머지 3개의 숫자를 더하면 1+2+3=6입니다.

여기에 이미지 설명 삽입

기사는 여기서 끝납니다.
이 기사에서 C 언어의 고전적인 알고리즘 예제가 완료되기를 바랍니다.
그것은 C 언어와 알고리즘 학습에 대한 당신의 사랑을 고무시킬 수 있습니다.

  • 당신의 지원은 나의 가장 큰 격려입니다.

추천

출처blog.csdn.net/m0_47419053/article/details/126869337