一、問(wèn)題描述
1.1、什么是完數(shù)
完全數(shù)(Perfect number),又稱完美數(shù)或完備數(shù),是一些特殊的自然數(shù)。
它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身。
如果一個(gè)數(shù)恰好等于它的真因子之和,則稱該數(shù)為“完全數(shù)”。
第一個(gè)完全數(shù)是6,第二個(gè)完全數(shù)是28,第三個(gè)完全數(shù)是496,后面的完全數(shù)還有8128、33550336等等。
1.2、完數(shù)定義
如果一個(gè)數(shù)恰好等于它的真因子之和,則稱該數(shù)為“完全數(shù)” 。各個(gè)小于它的約數(shù)(真約數(shù),列出某數(shù)的約數(shù),去掉該數(shù)本身,剩下的就是它的真約數(shù))的和等于它本身的自然數(shù)叫做完全數(shù)(Perfect number),又稱完美數(shù)或完備數(shù)。
例如:
第一個(gè)完全數(shù)是6,它有約數(shù)1、2、3、6,除去它本身6外,其余3個(gè)數(shù)相加,1+2+3=6。
第二個(gè)完全數(shù)是28,它有約數(shù)1、2、4、7、14、28,除去它本身28外,其余5個(gè)數(shù)相加,1+2+4+7+14=28。
第三個(gè)完全數(shù)是496,有約數(shù)1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9個(gè)數(shù)相加,1+2+4+8+16+31+62+124+248=496。
后面的完全數(shù)還有8128、33550336等等。
1.3、本文的問(wèn)題描述
本文完數(shù)
問(wèn)題的描述
如下幾點(diǎn)所示
- 輸出 1-10000 以內(nèi)所有完數(shù)。
- 完數(shù)所有的真因子(即除了自身以外的約數(shù))的和恰好等于它本身。
- 六是一個(gè)完全數(shù),它有約數(shù)1、2、3、6,除去它本身6外,其余3個(gè)數(shù)相加,1+2+3=6。
二、算法實(shí)例編譯環(huán)境
本文C語(yǔ)言經(jīng)典算法實(shí)例的編譯環(huán)境,使用的是集成開(kāi)發(fā)環(huán)境:Visual Studio 2019
Visual Studio 2019官網(wǎng)鏈接如下
Visual Studio 2019官網(wǎng)鏈接
Visual Studio 2019集成的開(kāi)發(fā)環(huán)境的特點(diǎn)有
- Visual Studio 2019默認(rèn)安裝Live Share代碼協(xié)作服務(wù)。
- 幫助用戶快速編寫代碼的新歡迎窗口、改進(jìn)搜索功能、總體性能改進(jìn)。
- Visual Studio IntelliCode AI幫助。
- 更好的Python虛擬和Conda支持。
- 以及對(duì)包括WinForms和WPF在內(nèi)的.NET Core 3.0項(xiàng)目支持等
三、算法實(shí)例實(shí)現(xiàn)過(guò)程
3.1、包含頭文件
包含頭文件 代碼如下所示
#pragma once
// 包含頭文件
#include <stdio.h>
#include <stdlib.h>
- 將要用到的C語(yǔ)言頭文件包含近年來(lái)。
3.2、聲明變量
聲明變量 代碼如下所示
// 聲明變量
int i, j, k;
- 聲明了變量 i, j, k 。
3.3、使用for循環(huán)來(lái)求1-10000的完數(shù)
使用for循環(huán)來(lái)求1-10000的完數(shù) 代碼如下所示
/// <summary>
/// 使用for循環(huán)來(lái)求1-10000的完數(shù)
/// </summary>
/// <returns>無(wú)</returns>
for (i = 1; i < 10000; i++)
{
}
- 使用for循環(huán)來(lái)求1-10000的完數(shù)。
- 求1-10000的完數(shù)的具體實(shí)現(xiàn)如下幾個(gè)點(diǎn)所示。
3.4、變量賦值
變量賦值 代碼如下所示
// 變量賦值, 保證每次循環(huán)時(shí)sum的初值為0
int sum = 0;
- 變量賦值, 保證每次循環(huán)時(shí)sum的初值為0。
- 變量賦值進(jìn)行完數(shù)的求解。
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、判斷因子數(shù)的和是否和原數(shù)相等
判斷因子數(shù)是否和原數(shù)相等 代碼如下所示
/// <summary>
/// 判斷因子數(shù)的和是否和原數(shù)相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因數(shù)是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
- 判斷因子數(shù)的和是否和原數(shù)相等。
- 如果因子數(shù)的和與原數(shù)相等,則這個(gè)數(shù)是完全數(shù)。
- 如果因子數(shù)的和與原數(shù)不相等,則這個(gè)數(shù)不是完全數(shù)。
按F5進(jìn)行編譯,調(diào)試結(jié)果如下所示。
6 的因數(shù)是: 1 2 3
28 的因數(shù)是: 1 2 4 7 14
496 的因數(shù)是: 1 2 4 8 16 31 62 124 248
8128 的因數(shù)是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064
請(qǐng)按任意鍵繼續(xù). . .
- 可以看到1-10000內(nèi)的完全數(shù)總共有四個(gè)。
- 這幾個(gè)完數(shù)分別是
- 6 的因數(shù)是: 1 2 3
- 28 的因數(shù)是: 1 2 4 7 14
- 496 的因數(shù)是: 1 2 4 8 16 31 62 124 248
- 8128 的因數(shù)是: 1 2 4 8 16 32 64 127 254 508 1016 2032 4064
3.7、對(duì)求1-10000內(nèi)的完數(shù)功能進(jìn)行函數(shù)模塊化
- 對(duì)求1-10000內(nèi)的完數(shù)采用函數(shù)編寫的方式。
對(duì)求1-10000內(nèi)的完數(shù)功能進(jìn)行函數(shù)模塊化 代碼如下所示。
3.7.1、對(duì)求1-10000內(nèi)的完數(shù)功能進(jìn)行函數(shù)模塊化的函數(shù)聲明
/// <summary>
/// 求完數(shù)的函數(shù)聲明
/// </summary>
void numberPerfect();
- 聲明了求完數(shù)的函數(shù)。
3.7.2、對(duì)求1-10000內(nèi)的完數(shù)功能進(jìn)行函數(shù)模塊化的函數(shù)定義
對(duì)求1-10000內(nèi)的完數(shù)功能進(jìn)行函數(shù)模塊化的函數(shù)定義 代碼如下所示。
/// <summary>
/// 求完數(shù)的函數(shù)定義
/// </summary>
void numberPerfect()
{
// 聲明變量
int i, j, k;
/// <summary>
/// 使用for循環(huán)來(lái)求1-10000的完數(shù)
/// </summary>
/// <returns>無(wú)</returns>
for (i = 1; i < 10000; i++)
{
// 變量賦值, 保證每次循環(huán)時(shí)sum的初值為0
int sum = 0;
for (j = 1; j < i; j++)
{
/// <summary>
/// // 判斷j是否為i的因子
/// </summary>
/// <returns></returns>
if (i % j == 0)
{
sum += j;
}
}
/// <summary>
/// 判斷因子數(shù)的和是否和原數(shù)相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因數(shù)是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
}
printf("\n");
}
- 將上面幾點(diǎn)的功能加入到函數(shù)體即可,如上面的函數(shù)定義所示。
- 實(shí)現(xiàn)了函數(shù)的功能:求1-10000內(nèi)的完數(shù)。
- 使用for循環(huán)的方式。
- 求1-10000之內(nèi)的完數(shù)。
- 先求自身的因子數(shù)。
- 在求因子數(shù)的和是否與自身相等。
3.7.3、主函數(shù)中調(diào)用求1-10000內(nèi)的完數(shù)功能的函數(shù)numberPerfect
主函數(shù)中調(diào)用求1-10000內(nèi)的完數(shù)功能的函數(shù)numberPerfect 代碼如下所示
// 調(diào)用求完數(shù)的函數(shù)
numberPerfect();
按F5進(jìn)行編譯,調(diào)試結(jié)果如下所示。
四、經(jīng)典算法實(shí)例程序 完整代碼
經(jīng)典算法實(shí)例程序完整代碼如下所示
4.1、main.h文件
#pragma once
// 包含頭文件
#include <stdio.h>
#include <stdlib.h>
/// <summary>
/// 求完數(shù)的函數(shù)聲明
/// </summary>
void numberPerfect();
4.2、main.c文件
#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
/// <summary>
/// 主函數(shù)
/// </summary>
/// <returns>返回0</returns>
int main()
{
system("color 3E");
// 調(diào)用求完數(shù)的函數(shù)
numberPerfect();
system("pause");
return 0;
}
/// <summary>
/// 求完數(shù)的函數(shù)定義
/// </summary>
void numberPerfect()
{
// 聲明變量
int i, j, k;
/// <summary>
/// 使用for循環(huán)來(lái)求1-10000的完數(shù)
/// </summary>
/// <returns>無(wú)</returns>
for (i = 1; i < 10000; i++)
{
// 變量賦值, 保證每次循環(huán)時(shí)sum的初值為0
int sum = 0;
for (j = 1; j < i; j++)
{
/// <summary>
/// // 判斷j是否為i的因子
/// </summary>
/// <returns></returns>
if (i % j == 0)
{
sum += j;
}
}
/// <summary>
/// 判斷因子數(shù)的和是否和原數(shù)相等
/// </summary>
/// <returns></returns>
if (sum == i)
{
printf("%d 的因數(shù)是: ", i);
for (k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d ", k);
}
}
printf("\n");
}
}
printf("\n");
}
五、總結(jié)
本文的C語(yǔ)言經(jīng)典算法實(shí)例:完數(shù),要實(shí)現(xiàn)的目標(biāo)如下
- 輸出 1-10000 以內(nèi)所有完數(shù)。
- 完數(shù)所有的真因子(即除了自身以外的約數(shù))的和恰好等于它本身。
- 六是一個(gè)完全數(shù),它有約數(shù)1、2、3、6,除去它本身6外,其余3個(gè)數(shù)相加,1+2+3=6。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-779575.html
文到這里就結(jié)束啦。
希望本文的C語(yǔ)言經(jīng)典算法實(shí)例:完數(shù)。
能激發(fā)你對(duì)C語(yǔ)言以及算法學(xué)習(xí)的熱愛(ài)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-779575.html
- 你的支持是對(duì)我最大的鼓勵(lì)。
到了這里,關(guān)于C語(yǔ)言經(jīng)典算法實(shí)例7:完數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!