完数 素数 阿姆斯特朗数的题解思路

目录

1-完数

2-阿姆斯特朗数


1-完数

完数定义:

完数就是:它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

例如:

6=1+2+3

28=1+2+7+14等形如此类的都行

#include<stdio.h>
#define N 10000
int main()
{
	long p[N];
	int i,num,count, s,c=0;
	for (num = 2; num < N; num++) {
		s = num;
		count = 0;
		for (i = 1; i < num; i++) {//core
			if (num % i == 0) {
				p[count++] = i;
				s -= i; //我感觉比较妙的部分在这里
			}
		}
		if (s == 0) {
			printf("%4ld是一个完数,因子是", num);
			printf("%ld=%ld", num, p[0]);
			for (i = 1; i < count; i++)
				printf("+%ld", p[i]);
			printf("\n");
			c++;
		}
	}
	printf("\n共找到%d个完数。\n", c);
	
	return 0;
}

2-阿姆斯特朗数 

什么是阿姆斯特朗数,就是比如说1634= 1的四次幂 + 6的四次幂 + 3 的四次幂 + 4的四次幂 

// 54748 = 5的五次幂 + 4 的五次幂 + 7的五次幂 + 4的五次幂 + 8的五次幂

//其实这里像素数但是又不是素数。对待素数也同样使用

其实我的方法很简单,就是有一个全局数组,然后把你输入的每一位数字存在里边,然后再进行输出他的各位幂次方的和,如等的话就是阿姆斯特朗数,不然就不是,其实还可以再优化,但是大体的方案就是这个了。 

//阿姆斯特朗数
#include<stdio.h>
#include <math.h>
#define N 10000
int arr[N];
int function(int y);
int main()
{
	int num, t, m=0,judge;
	
	scanf("%d", &num);
	judge = num;
	while (num > 0) {
		t = num % 10;
		num /= 10;
		arr[m++] = t;
	}
	int i,n;
	 //function(arr[i], m);
	 n = function(m);
	if (judge == n) {
		printf("%d是阿姆斯特朗数", judge);
	}else
		printf("%d不是阿姆斯特朗数", judge);

	return 0;
}
int function(int y) {
	int i,s=0;
	for (i = y; i >= 0; i--) {
		s += pow(arr[i], y);
	}
	return s;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i-阿松!

请给我一毛钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值