您的位置:首页 > 其它

查找1到1000的完数

2012-05-29 11:27 453 查看
名词解释:

完数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

公式2p−1(2p−1) (p是指素数)。

由公式还可知有趣的二进制的格式表示,为p个1及p-1个0组成。

610 = 11022810 = 11100249610 = 1111100002812810 = 11111110000002

#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main (int argc,char *argv[])
{
int m, i, s;
int buffersize=1000;
char *head,*point, *buffer = malloc(buffersize);
char tmp[10];
point = buffer;
for (m = 1; m <= 1000; m++)
{
s = 0;
head=point;
#define __MYPRINTF(format,...)\
memset(tmp,'\0',sizeof(tmp));\
snprintf (tmp,sizeof(tmp),format, ## __VA_ARGS__);\
memcpy(point,tmp,strlen(tmp));\
point += strlen(tmp);
__MYPRINTF("%d:",m);
for (i = 1; i < m; i++)
{
if (m % i == 0)
{
s = s + i;
__MYPRINTF ("%d,", i);
}
}
if (s == m)
{
__MYPRINTF ("\n");
}
else
{
point = head;
}
*point = '\0';
}
printf("%s",buffer);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: