PTA chap4课后 L2-1 找完数(c语言)
L2-1 找完数
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
作者:陈建海
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB
思路
1、根据题目要求,在有完数的可以将代码分为两部分,一部分用以判断并寻找完数,一部分用以寻找完数的因子并逐一输出。
2、判断完数时可以使用嵌套循环。
3、判断有无完数时可以使用中间变量,设定中间变量的值,寻找完数的循环完毕之后,再判断该值是否变化。
代码如下:
#include <stdio.h>
int main()
{
int n,m,sum;
scanf("%d %d",&m,&n);
int a;
int k=0;
int i,j;
for(i=m;i<=n;i++){
sum=0; //每次内部循环完毕,从0开始再寻找下一个完数
for(j=1;j<i;j++){
if(i%j==0){
sum=sum+j;
}
}
//以寻找因子为条件,各因子数相加的总和即为一个完数,但因子中不能包括自身
if(i==sum) //遍历m到n中所有已知的完数
{
printf("%d = 1",i);
//首先输出1,确保格式正确
for(a=2;a<i;a++){
if(i%a==0){
printf(" + %d",a); //输出后续因子
}
}
printf("\n"); //每个完数输出完毕后换行
k++;
}
}
if(k==0){
printf("None\n");
}
//以k的数值变化来判断有无完数
return 0;
}
代码运行结果:

问题总结:
1、输出因子时需排除自身。
2、注意开头输出1时与后续输出因子时格式的区分。
相关推荐
《模式识别与数据挖掘》配套PPT课件
《模式识别与数据挖掘》配套PPT课件
科技成果转化项目进场交易前,评估备案环节需要准备哪些材料?_8.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核
人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核
跨境电商供应链管理(AIGC版)课件+教案+参考答案
跨境电商供应链管理(AIGC版)课件+教案+参考答案
110KV单电源电网三段式电流保护+距离继电保护整定计算说明报告(23页+6000字)
内容概要:本文是一份关于110kV单电源电网继电保护整定计算的综合性技术报告,全文共23页、约6000字,系统阐述了三段式电流保护与距离保护的设计原理及其整定计算方法。报告深入分析了电力系统在短路故障条件下的电流与阻抗特性,详细推导了电流保护Ⅰ、Ⅱ、Ⅲ段的动作范围、整定原则、灵敏度校验及时间配合机制,确保满足继电保护的选择性、速动性、灵敏性和可靠性“四性”要求。同时,针对长距离或重要输电线路,补充介绍了距离保护的阻抗整定计算方法,并可能结合Matlab进行仿真验证与辅助计算,提升整定结果的准确性与工程实用性。; 适合人群:适用于电气工程及其自动化相关专业的高年级本科生、研究生,以及从事电力系统继电保护设计、运行维护的工程技术人员;要求读者具备电力系统分析、短路计算及继电保护的基础理论知识。; 使用场景及目标:①掌握110kV单电源辐射型电网中三段式电流保护的整定流程与实际计算步骤;②理解距离保护的工作原理及其在复杂工况下的应用优势;③完成实际工程项目的保护配置与整定计算任务,或作为课程设计、毕业设计及科研课题的技术参考资料;④结合Matlab工具实现整定计算的程序化处理与动作特性仿真验证。; 阅读建议:建议读者结合《电力系统继电保护原理》等相关教材同步学习,重点研读整定公式的推导过程与典型算例的计算细节,注意区分电流保护与距离保护的适用场景与配置逻辑,有条件时应利用Matlab等工具对保护动作行为进行建模与仿真,以深化对保护协调配合机制的理解。


