输入两个正整数,输出两个正整数之间完数的个数及所有完数;输出一千以内的完数(C)

那些编程入门题(C) 专栏收录该内容
25 篇文章 35 订阅

养成好习惯,点个赞 再走;有问题,欢迎私信、评论,我看到都会回复的

  • 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身
  • 因数 是指整数m除以整数n(n≠0) 的商正好是整数而没有余数,我们就说n是m的因数

比如6,28都是完数:6 =1+2+3;28 =1+2+4+7+14。

对于某一整数来说,其最大因子为n/2 (若n为偶数最大因子为n/2,若为奇数最大因子小于n/2),在n/2〜n-1范围内没有数据可以整除此数

输入两个正整数,输出两个正整数之间完数的个数及所有完数

#include<stdio.h>
#include<math.h>

int perfectNumber(int n){ //判断是否为完数 
	int sum = 0;
	for(int i = 1; i <= n/2; i++){
		if(n % i == 0){
			sum += i;
		}
	}
	if(sum == n)return 1;
	return 0;
}

int main(){
	int count = 0;
	int m,n;
	scanf("%d%d", &m, &n);
	
	if(n > 1 && m > 1){  //1必定不是完数
		if(m > n){ //确保m为左边界,n为右边界
			int t = m;
			m  = n;
			n = t;
		}
		
		for(int i = m; i <= n; i++){
			if(perfectNumber(i)){
				count++;
				printf("%d\n", i);
			}
		}
	}

	printf("有 %d 个完数", count);
	
	return 0;
} 

输入:2 10000
输出:

6
28
496
8128

有 4 个完数

输出一千以内的完数

#include<stdio.h>
int main()
{
	int i, t, sum;  //t代表数的因子,sum代表一个数的因子之和 
	for(i = 1; i <= 1000; i++)
	{
		sum = 0;
		for(t = 1; t <= i/2; t++)
		{
			if(i % t == 0){
				sum += t;
			}
		}
		if(sum == i){
			printf("%-10d", i);
		}
	}
	return 0;
}

输出:

6         28        496      

C语言入门题目文章导航:

  1. 素数(C)
  2. 水仙花数(C)
  3. 斐波那契数列(C)
  4. 本篇文章
  5. 阶乘(C)
  6. 直角杨辉三角形(C)
  7. 大写字母、小写字母、ASCII码(C)
  8. 输入一个字符,找出他的前驱字符和后继字符(C)
  9. 最大数、最小数(C)
  10. 百钱买百鸡(C语言,枚举法)
  11. 辗转相除法求最大公约数,利用最大公约数求最小公倍数(C)
  12. 输入一个年份和一个月份,输出该年此月天数;知道日期,计算该日是本年的第几天(C)
  13. 输入一个不多于4位的正整数,求它的位数,并按逆序输出各位数字(C)
  14. 利用二维数组求方阵的主次对角线之和(C)
  15. 在一个二维数组中找出最小数及其所在的行和列(C)
  16. 找出一个二维数组中的鞍点(C)
  17. 删除指定字符串的指定字符(C)
  18. 字符串(C)
  19. 条件判断语句1(C)
  20. 条件判断语句2(C)
  21. 圆、三角形、正方形、长方体、计算1到100的和、和差积商、平均值
  22. 输入三个整数,要求程序把数据按从小到大的顺序放入x y z中,然后输出(C)
  23. 18个数围成一圈,求相邻三数之和最大数(C)
  24. 梯形法求定积分(C)
  25. 学生与课程的综合问题(C)
参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值