请教各位一个题目
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。做到1到1000的循环,顺序找到每个数的因数,如6,计算6%1、6%2,6%3……6%5.有余数即不是因数。求因数的和s,判断与6相等(6=1+2+3),若相等输出,继续下个数;不相等继续下个数。
不是很难
有时间编一下程序供大家指正!
[[it] 本帖最后由 hp15265615 于 2008-9-23 11:03 编辑 [/it]] [code]#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0, j = 0, sum = 1;
char str[512];
for(i = 2; i <= 1000; i ++)
{
sum = 1;
memset(str, 0x00, sizeof(str));
sprintf(str, "%d", sum);
for(j = 2; j < i; j ++)
{
if(0 == i%j)
{
sum += j;
sprintf(str+strlen(str), " + %d", j);
}
}
if(sum == i)
printf("%4d = %s\n", sum, str);
}
return 0;
}[/code] #include <stdio.h>
#include <math.h>
int main()
{
long n,zp,zk,i;
for(n=2;n<20;n++)
{
zp=(long)pow(2,n)-1;
for(i=2,zk=(long)sqrt(zp);i<=zk;i++) if(zp%i==0) break;
if(i>zk) printf("%.lf\n",(pow(2,n-1)*zp));
}
return 0;
}
去下一个 C语言经典例题100例
百度上大把有,这个可能合适现在程度的你! 恩 那个上面的源程序我看过 不过看不懂 好像不太对 它上面那个 #include <stdio.h>int main()
{
int num;
int i;
for(num=1;num<=1000;num++)
{ int sun=0;
for(i=1;i<=(num/2);i++)
{
if(num%i==0)
{ sum=sum+i;}
}
if(sum==num) printf("%d\n",num);
}
}
[[it] 本帖最后由 w0nfer 于 2008-9-25 17:40 编辑 [/it]] #include "stdio.h"
int f(n)
{int i,y=0;
for(i=1;i<n;i++)
if(n%i==0)
y+=i;
return y;
}
main()
{int n;
for(n=1;n<1000;n++)
if(n==f(n))
printf("%d ",n); 谢谢各位了 各位的程序都可以 运行结果也正确 w0nfer的代码那个 应该是 int sum=0吧 呵呵;
谢谢各位了 哪个速度更快呢LZ - -
页:
[1]
