算法之寻找完数(C语言)
什么是完数?
如果一个数恰好等于它的真因子之和,则称该数为完数。
第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
实现目标
寻找10000以内的完数,并且实现用链表存放完数的因子,程序实现整个运行所需时间。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include <time.h>//定义一个单链表存放完数
typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;bool initlist(LinkList &L){L = (LNode *)malloc(sizeof(LNode));L -> next = NULL;return true;
}void findwanshu(LinkList &L,int num){for (int i=1;i<=num;i++){int sum = 0;for (int j=1;j<=i/2;j++){if(i%j == 0){sum = sum + j;}}if (sum == i){LNode *s = (LNode *)malloc(sizeof(LNode));s -> data = 0;s -> next = NULL;L -> next = s;for (int k=1;k<=sum/2;k++){if (sum%k==0){ s -> data = sum;LNode *p = (LNode *)malloc(sizeof(LNode));p -> data = k;p -> next = s -> next;s -> next = p;}}LNode *find = s->next;printf("%d的因子是",s->data);while(find != NULL){int yinzi = find -> data;find = find -> next;printf("%d",yinzi); if (find != NULL){printf(",");} }printf("\n\n");}}
}int main(){clock_t start, end;start = clock();LinkList(L);initlist(L);findwanshu(L,10000);end = clock();double Total_time = (double)(end - start) / CLOCKS_PER_SEC; //单位换算成秒printf("程序用时 time = %lf s\n",Total_time);return 0;
}
代码运行效果
总结
1.用单链表存放完数的因子并输出的过程相当于一个链栈。栈的特点是先入后出。所以对于先存放的因子总是后输出。
2.完数中的因子可以用”%“方式表达,能够整除的为其中一个因数。
算法之寻找完数(C语言)相关推荐
- 第5关:C循环-寻找完数-------C语言程序设计技术(循环结构程序设计2)
第5关:C循环-寻找完数-------C语言程序设计技术(循环结构程序设计2) #include<stdio.h>int main(void){ /*********Begin****** ...
- 【C语言】(错题整理) 寻找完数、字符串中各类字符数的统计、最大公约数和最小公倍数、回文数计算 (循环、函数相关内容)
目录 一.循环 1.寻找完数(计算因子例题) 2.字符串中各类字符数的统计 3.最大公约数和最小公倍数 求最大公约数: 最小公倍数:最小公倍数=两整数的乘积÷最大公约数 二.函数 1.回文数计算 本篇 ...
- C++ 寻找完数 | Java 完数
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数.它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身.如果一个数恰好等于它的因子之和,则称该数为&q ...
- Java算法(八)详细解析:寻找完数
完数是指一个数的所有因子相加起来等于本身.如 6 = 2 + 3 + 1: 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1 ...
- C语言简易程序设计————20、寻找完数
无意中发现了一个巨牛巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,小白也能学,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家 ...
- 完数c++语言程序_C语言经典100题(19)
1 上期答案揭晓 首先给大家看看上一篇文章C语言经典100题(18)中第三部分编程题的答案: #includeint main(){ int s=0,a,n,t; printf("请输入 a ...
- 1000以内完数c语言程序_C语言经典面试题目及答案详解(二)
接着上次来说,C语言经典面试题目及答案详解(一)当中大部分是一些概念和理解的东西 ,今天说一说实践操作,有关c的经典程序. 1.输出9*9口诀.共9行9列,i控制行,j控制列. #include &q ...
- java 蓝桥杯算法训练 求完数(题解)
试题 算法训练 8-2求完数 资源限制 时间限制:50.0s 内存限制:256.0MB 问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. ...
- 200 300的完数 c语言,C语言求完数(完全数)(详解版)
问题描述 求某一范围内完数的个数. 如果一个数等于它的因子之和,则称该数为"完数"(或"完全数").例如,6的因子为1.2.3,而 6=1+2+3,因此6是&q ...
- c语言200-500完数,C语言求完数(完全数)(详解版)
问题描述 求某一范围内完数的个数. 如果一个数等于它的因子之和,则称该数为"完数"(或"完全数").例如,6的因子为1.2.3,而 6=1+2+3,因此6是&q ...
最新文章
- iOS 之 IQKeyboardManager 解决使用UITableView 界面上移问题
- 思维dp ---- Codeforces Round #722 (Div. 1) B. Kavi on Pairing Duty [思维dp + 数学]
- 浅谈Oracle Online redo log
- Nginx——域名|端口|目录请求转发配置DEMO
- css 固定内容显示范围,css之让文字在一定范围内显示,不超过固定的宽度和高度...
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-数据库设计
- hadoop fs:du统计hdfs文件(目录下文件)大小的用法
- Serializer字段和选项
- 审计工作存在的难点和问题_电力工程造价审计的难点与对策有哪些?学习安装电力造价广联达计价看这里!!...
- 基于JAVA+SpringMVC+MYSQL的在线招标管理系统
- MATLAB1阶零模型,MATLAB 空间计量模型的实现
- 搭建Zabbix Proxy HA
- Android Studio - xml布局文件不显示代码怎么办?
- https协议为什么比http协议更加安全
- Centos安装交叉编译工具链
- pythonexcel源码_Python对Excel操作详解_Python教程
- 计算机网络里面ap是什么,网络ap是什么意思
- 麻雀优化算法 SSA python实现
- 关于MAC安装windows【支持老版本】 支持安装全系列windows
- 2019-11-29-Mastering_bitcoin