目录
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;
}