请编写程序,输入正整数n,1<n<50000, 输出小于n的所有
1.完全数、
2.亲密数、
3.水仙花数、
4.阶乘和数、
5.自守数、
6.孪生素数,
7.黑洞数。
分析:
1.完全数是恰好等于自身的因子之和的数,X如6是,因为6=1*2*3=1+2+3;
2.亲密数是两个正整数,每个全部因子之和等于对方(因子中只不计本身),X如220和284是, 因为220的全部因子是1,2,4,5,10,11,20,22,44,55,110,和为284,而284的全部因子是1,2,4,71,142,和为220;
3.水仙花数是恰好等于自身各位数字立方和的数,X如153是,因为153=13+53+33;
4.阶乘和数是恰好等于自身各位数字阶乘的和的数,X如145是,因为145 = 1!+4!+5!;
5.自守数是平方后尾部数字是自身的数,X如9376是,因为93762=87909376;
6.孪生素数是差2的两个素数,X如197和199。
7.黑洞数又称陷阱数,是经有限次“重排求差”操作达到的不再改变的数,“重排求差”操作是将组成一个数的各位数字重排得到的最大数减去最小数,例如207,“重排求差”操作序列是:702-027=693,963-369=594,954-459=459,再做下去不变了。再用208算一次,也停止到495,所以495是三位黑洞数
程序:
#include "stdio.h"
#include "math.h"
int fun(int n)
{//求n的所有因数和
int sum=1,i;
for(i=2;i<n;i++)if(n%i==0)sum=sum+i;
return sum;
}
int jiecheng(int n)
{//求n的阶乘
int num=1,i;
for (i=2;i<=n;i++)num*=i;
return num;
}
int Prime(int n)
{//判断n是否是素数
int i=3;
while(i<=sqrt(n))if(n%i++==0)return 0;
return 1;
}
void wanquanshu(int n)
{//完全数
int i,count=0;
printf("完全数:\n");
for(i=0;i<=n;i++)
{
if(i==fun(i))
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void qinmishu(int n)
{//亲密数
int i,temp,count=0;
printf("亲密数:\n");
for (i=0;i<=n;i++)
{
temp=fun(i);
if (temp>i&&i==fun(temp))
{
printf("(%d,%d) ",i,temp);
if (++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void shuixianhua(int n)
{//水仙花数
int i,m=3,sum,count=0,temp;
printf("水仙花数:\n");
for(i=100;i<=n;i++)
{
if(999<i&&i<10000)m=4;
if(9999<i&&i<100000)m=5;
temp=i;
sum=0;
while (temp)
{
sum+=(int)pow(temp%10,m);
temp/=10;
}
if (sum==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void jiechengheshu(int n)
{//阶乘和数
int i,count=0,temp,sum;
printf("阶乘和数:\n");
for(i=0;i<=n;i++)
{
sum=0;
if (i==0)sum=jiecheng(i);
else
{
temp=i;
while(temp)
{
sum+=jiecheng(temp%10);
temp/=10;
}
}
if (sum==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void zishoushu(int n)
{//自守数
int i,count=0,temp,t;
long num;
printf("自守数:\n");
for(i=0;i<=n;i++)
{
num=i*i;
t=10;
temp=i/10;
while(temp)
{
t*=10;
temp/=10;
}
if (num%t==i)
{
printf("%-5d ",i);
if(++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
void luanshengsushu(int n)
{//孪生素数
int i,count=0;
printf("孪生素数:\n");
for(i=3;i<=n-2;i+=2)
{
if (Prime(i)&&Prime(i+2))
{
printf("(%d,%d) ",i,i+2);
if (++count%5==0)printf("\n");
}
}
if (count%5!=0) printf("\n");
}
int main()
{
int n;
printf("输入n:");
scanf("%d",&n);
wanquanshu(n);
qinmishu(n);
shuixianhua(n);
jiechengheshu(n);
zishoushu(n);
luanshengsushu(n);
return 0;
}
温馨提示:答案为网友推荐,仅供参考