一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

# include <stdio.h>
int main ()
{
int i,j,sum;
for(i=2;i<1000;i++)
{
sum=0;
for(j=1;j<=i;j++)
{
if(i%j==0)
{
sum=sum+j;
}
if(sum==i)
{
printf("%d its factors are %d\n",i,j);
}
}
}
return 0;
}
这是我写的程序,哪里错了啊

#include"stdio.h"

main()

{

int j,i,k=0;

for(j=6;j<1001;j++)

{

for(i=1;i<=j/2;i++)if(j%i==0)k+=i;

if(j==k)

  {

  printf("%4d its factors are ",k);

  for(i=1;i<=j/2;i++)

  if(j%i==0)printf("%d,",i);printf("\b \n");

  }

k=0;

}

getch()();

}

扩展资料

梅森素数的基础研究方面,法国数学家鲁卡斯和美国数学家雷默都做出了重要贡献;以他们命名的“鲁卡斯-雷默方法”是目前已知的检测梅森素数素性的最佳方法。另外,中国数学家、语言学家周海中给出了梅森素数分布的精确表达式;这一研究成果被国际上命名为“周氏猜测”。

需要指出的是,完全数其实目前并不“完全”,它还有一些谜团尚未解决。例如:完全数是有限还是无穷多个?存在不存在奇完全数?这是当今数论领域的两大著名难题。这些难题与其它科学难题一样,有待人们去攻克。正如德国数论专家西格尔所言:“待到它们被完全破解时,完全数才算是真正的完全数。”


参考资料来源:百度百科-c语言

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-16

include <iostream>

using namespace std;

int main() {

for (int i = 2; i <= 1000; i++) {//从2到1000的数

int sum = 0;//因子总和

for (int j = 1; (j * j) <= i; j++) {//j做除数,√n复杂度,减少一半的计算量

if (i % j == 0) {//可以整除,为其因子

sum = j + (i / j) + sum;//因子之和

}

}

if ((sum - i) == i) cout << "1000以内的完数:" << i << endl;//因子之和减去其本身(1*i也为其因子)如果等于这个数本身,则为完数

}

}

扩展资料

在数学领域,6是第一个完全数,也是最小的完全数。所谓完全数(又称完美数或完备数),是一种特殊的自然数;它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

例如6有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6;第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。公元前6世纪的古希腊数学家、哲学家毕达哥拉斯是最早探究完全数的人,他已经知道6和28这两个自然数是完全数了。

参考资料来源:百度百科-C语言

本回答被网友采纳
第2个回答  2019-05-23

#include<stdio.h>

int main()

int i,j,sum=1;

int b[100];

for(i=3;i<=1000;i++)

sum=1;

int k=0;

for(j=2;j<i;j++)

if( i%j==0) {sum+=j;b[k++]=j;}

if(i==sum)

{

printf("%d its factors are %d",i,b[0]);

for(int a=1;a<k; a++)

printf(",%d",b[a]);

printf("\n");

}

}

扩展资料:

c语言需要说明的是:

1.一个C语言源程序可以由一个或多个源文件组成。 

2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。  

4.源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

参考资料:

百度百科-c语言

第3个回答  推荐于2017-04-22

两处错误 改过来了 

自己对一下吧

# include <stdio.h>
int main ()
{
int i,j,sum;
for(i=2;i<1000;i++)
{
sum=0;
for(j=1;j<i;j++)
{
if(i%j==0)
{
  sum=sum+j;
}
}
if(sum==i)
{
  printf("%d its factors are %d\n",i,j);
}
}
return 0;
}

追问

哪有两处。。求赐教

追答

如注释

# include <stdio.h>
int main ()
{
    int i,j,sum;
    for(i=2;i<1000;i++)
    {
        sum=0;
        for(j=1;j<i;j++)//判断因子时不能包含自身
        {
            if(i%j==0)
            {
              sum=sum+j;
            }
        }
        if(sum==i)//在所有因子累加后再判断是否与自身相等
        {
          printf("%d its factors are %d\n",i,j);
        }
    }
    return 0;
}

追问

这个程序好像只能输出自己本身这个因式。。如果我要让它的输出格式变成例如 6 its factors are 1,2,3 这样子的话要怎么改进呢?谢谢

追答

这样啊 

有两种方法

一种是开一个数组 把所有因子保存在里面 然后输出

另一种是在判断后再算一次 把所有输出

后一种改起来简单

#include <stdio.h>
int main ()
{
int i,j,sum;
for(i=2;i<1000;i++)
{
sum=0;
for(j=1;j<i;j++)//判断因子时不能包含自身
{
if(i%j==0)
{
sum=sum+j;
}
}
if(sum==i)//在所有因子累加后再判断是否与自身相等
{
printf("%d its factors are ",i);
for(j=1;j<i;j++)
{
if(i%j==0)
{
if(j == 1) printf("%d", j);
else printf(",%d", j);
}
}
printf("\n");
}
}
return 0;
}

追问

程序有点。。。看不大懂。。。。。。

追答if(sum==i)//如果相等 为符合条件的完数 执行打印
        {
            printf("%d its factors are ",i);//打印开头部分 比如“6 its factors are ”
            for(j=1;j<i;j++)//再次执行因数计算 打印所有因数
            {
                if(i%j==0)
                {
                    if(j == 1) printf("%d", j);//对于第一个因数 不打逗号
                    else printf(",%d", j);//其余因数 打印逗号和因数值
                    /*
                    其实这段程序 是为了输出看起来好看 不然直接这样
                    printf("%d,", j);
                    这样看起来简单的多 但会多打印一个逗号 效果是
                    6 its factors are 1,2,3,
                    */
                }
            }
            printf("\n");//对于每个完数 打印完毕 输出换行
        }

本回答被提问者采纳
第4个回答  2019-05-23

public class five{

public static void main(String[]args){

int sum;

for(int i=1;i&lt;=1000;i++){

sum=0;

for(int j=1;j&lt;i;j++){

if(i%j==0){

sum=sum+j;

}

}

if(i==sum){

System.out.println(i);

}

}

}

}

运行结果:

扩展资料:

class定义和用法

class属性规定元素的类名(classname)。

class属性大多数时候用于指向样式表中的类(class)。不过,也可以利用它通过JavaScript来改变带有指定class的HTML元素。

提示和注释

注释:class属性不能在以下HTML元素中使用:base,head,html,meta,param,script,style以及title。

提示:可以给HTML元素赋予多个class,例如:&lt;span class="left_menu important"&gt;。这么做可以把若干个CSS类合并到一个HTML元素。

提示:类名不能以数字开头!只有Internet Explorer支持这种做法。

相似回答