还差黑洞数。。。。。。
#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;
}
温馨提示:答案为网友推荐,仅供参考