/*
*Copyright (c)2020,优快云学院
*All rights reserved.
*文件名称:main.c
*作 者:李先声
*完成日期:2020年8月25日
*版 本 号:v1.0
*问题描述:数字游戏
【项目1-完数】
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。
(1)输入一个数n,判断n是否是完数
(2)输出1000以内的所有完数
(3)亲密数:如果整数A的全部因子(包括1,不包括A本身)之和等于B;
且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
求3000以内的全部亲密数。
(提示:按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,
再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。)
*/
(1)输入一个数n,判断n是否是完数
#include <stdio.h>
int main( )
{
int i,n,num=0,remainder;
printf("请输入任意大于1的自然数n:");
scanf("%d",&n);
for(i=1;i<n;i++)
{
remainder=n%i;
if(remainder==0)
{
num=num+i;
}
}
if(num==n)
{
printf("%d是完数。",n);
}
else
{
printf("%d不是完数。",n);
}
return 0;
}
(2)输出1000以内的所有完数
#include <stdio.h>
int main( )
{
int i,n,num,remainder;
printf("1000以内的完数包括:");
for(n=2;n<=1000;n++)
{
num=0;
for(i=1;i<n;i++)
{
remainder=n%i;
if(remainder==0)
{
num=num+i;
}
}
if(num==n)
{
printf("%d\t",n);
}
}
return 0;
}
(3)亲密数:如果整数A的全部因子(包括1,不包括A本身)之和等于B;
且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
求3000以内的全部亲密数。
#include <stdio.h>
int main( )
{
int a,b,i,j,n,remainder1,remainder2;
printf("3000以内的全部亲密数包括:\n");
for(a=2;a<=3000;a++)
{
b=0;
for(i=1;i<a;i++)
{
remainder1=a%i;
if(remainder1==0)
{
b=b+i;
}
}
n=0;
for(j=1;j<b;j++)
{
remainder2=b%j;
if(remainder2==0)
{
n=n+j;
}
}
if(n==a)
{
printf("a=%d和b=%d为亲密数\n",a,b);
}
}
return 0;
}