一个数如果恰好等于它的因子之和,这个数就称为“完数”

这篇博客介绍了如何用C语言编写程序来找到1000以内的所有完数,并展示如何输出这些完数的因子。通过示例代码展示了如何检查一个数是否为完数,例如6的因子1,2,3相加等于6,故6是完数。

一个数如果恰好等于它的因子之和,这个数就称为“完数”(C语言)

题目要求:如标题,例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有完数,并按下面格式输出其因子:6 its factors are 1,2,3

以下为具体代码:

#include <stdio.h>
int main()
{
	int n,i;
	for(n=1;n<=1000;n++)
	{
		int sum=0;
		for(i=1;i<n;i++)
		{
			if(n%i==0)
				sum=sum+i;
		}
		if(sum==n)
			{
				printf("%d its factors are 1",n);
				for(i=2;i<n;i++)
					if(n%i==0)
						printf(",%d",i);
				printf("\n");
			}
	}
	return 0;
}
以下是几种不同风格的 Java 代码实现找出完数: #### 简单遍历输出完数 ```java public class PerNumber { public static void main(String[] args) { int s; for(int i = 6; i <= 1000; i++) { s = 1; for(int j = 2; j <= i/2; j++) { if(i % j == 0) { s += j; } } if(s == i) { System.out.print(i + " "); } } System.out.println(); } } ``` 该代码通过两层循环,外层循环遍历 6 到 1000 的,内层循环找出每个数因子并求和,最后判断因子和是否等于,若是则输出该[^1]。 #### 封装判断函的实现 ```java public class Main { public static boolean isIntegr(int j) { boolean isIntegr = false; int s = 0; for(int i = 1; i < j; i++) { if(j % i == 0) { s = s + i; } if(s == j) { isIntegr = true; } } return isIntegr; } public static void main(String[] args) { int n = 1; int m = 1000; boolean isExist = false; if(n >= 1 && m < 1000 && n < m) { for(int i = n; i < m; i++) { if(isIntegr(i)) { System.out.print(" " + i); isExist = true; } } if(!isExist) { System.out.println(" "); } } } } ``` 此代码将判断个数是否为完数的逻辑封装在 `isIntegr` 函中,在 `main` 函中遍历指定范围的,调用 `isIntegr` 函进行判断并输出结果[^2]。 #### 输出完数及其因子 ```java import java.util.Scanner; public class Main { public static void main(String[] args) { try(Scanner input = new Scanner(System.in)) { int n = 1000; for(int i = 1; i <= n; i++) { int sum = 0; for(int j = 1; j < i; j++) { if(i % j == 0) { sum += j; } } if(sum == i) { System.out.print(i + " its factors are "); for(int k = 1; k < i; k++) { if(i % k == 0) { System.out.print(k + " "); } } System.out.print("\n"); } } } } } ``` 该代码不仅找出完数,还会输出每个完数及其对应的因子[^4]。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值