/*输出1000以内的所有完数并输出其因子*/
#include
int main(){
int sum = 0;
for (int i = 1; i <= 1000; i++){
sum = 0;
for (int j = 1; j < i; j++){
if (i%j == 0){
sum = sum + j;
}
}
if (sum == i){
printf("%d\n", i);
for (int j = 1; j < i; j++){
if (i%j == 0)
printf("因子:%d", j);
}
printf("\n");
}
}
return 0;
}
完数,一般指完全数,一个自然数如果它的所有真因子(即除了自身以外的约数)的和等于该数,那么这个数就是完全数,如:6的真因子有1 、2、3,6=1+2+3,所以6是一个完全数。
输出1000以内的所有完数的代码如下:
Pascal语言实现如下:
var
i,j,k:integer;
begin
for i:=1 to 1000 do
begin
k:=0;
for j:=1 to i-1 do
if i mod j=0 then inc(k,j);
if k=i then writeln(i);
end;
end.
C语言实现如下:
#include
void main()
{
int i,j,k;
for(i=1;i<=1000;i++)
{
k=0;
for(j=1;j<=i-1;j++)
if(i%j==0) k+=j;
if(k==i) printf("%d\n",i);
}
}
输出结果皆为
6
28
496
完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)
求1000以内的完数的C语言代码如下:
#include
int main()
{
int n=1000;
int r,j,i;
for(i=1;i<=n; i++){
r = 0;
for(j=1;jif(i%j == 0){
r = r + j;
}
}
if(r == i){
printf("the result is:%d\n",r);
}
}
return 0;
}
输出结果为: 6,28,496,
即1000以内的完数只有6、28、496三个数字。
public class Test {
/**
* 求1000以内的所有完数
* 完数:一个数如果恰好等于它因子之和
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
int sum;
for(int i=1;i<=1000;i++)
{
sum=0;
for(int j=1;j<=i-1;j++)
{
if(i%j==0)
{
sum+=j;
if(sum==i)
System.out.print(i+";");
}
}
}
}
}
结果:6;24;28;496
#include
int main()
{
int i,j,sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;jif(i%j==0)
sum=sum+j;
if(i==sum)
{
printf("%d its factors are ",i);
for(j=1;jif(i%j==0)
printf("%d,",j);
printf("\n");
}
}
return 0;
}
结果如下:
6 its factors are 1,2,3,
28 its factors are 1,2,4,7,14,
496 its factors are 1,2,4,8,16,31,62,124,248,