新萄京计算机网络

 新萄京计算机网络     |      2020-03-24

改正下列程序中的错误,找出200以内的所有完数,并输出其因子。

素数的求解(c语言)

输入100到200之间所有的素数。

(1)通过两层for循环实现

#include <stdio.h>

int main()

{

int i;

int j;

1

<br>

 

for (i=100;i<=200;i++)

{

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

{

if(i%j==0)

break;

}

if(j==i)

printf("%d ",i);

}

return 0;

}

优化:

#include <stdio.h>

int main()

{

int i;

int j;

for (i=101;i<=200;i=i+2)

{

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

{

if(i%j==0)

break;

}

if(j>=i/2)

printf("%d ",i);

}

return 0;

}

(2)通过比较记录的次数

    #include <stdio.h>

     int main()

    {

int i,j;

int count=0;

for (i=100;i<=200;i++)

{

count=0;   //每一次count都需要从0开始

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

{

if(i%j==0)

break;

else

count++;

}

if(count==i-2)      //记录次数比较

                printf("%d ",i);

}

return 0;

}

(3)布尔类型

#include <stdio.h>

int main()

{

int i,j;

bool flag;

for( i=100;i<=200;i++ )

{

flag = true;

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

{

if( i%j==0 )

{

flag=false;

break;

}

}

if( flag )

printf("%d ",i);

}

return 0;

}

输入100到200之间所有的素数。 (1)通过两层for循环实现 #include stdio.h int main() { int i; int j; 1 br for (i=100;i=200;i++) { for...

#include<stdio.h>
int main()
{
 int i,j,s=0;
 for(i=1;i<=200;i++){
  for(j=2;j<=i/2;j++)
   if(i%j==0)
    s=s+j;
   if(s==i){
    printf("%d=1",i);
    for(j=2;j<=i/2;j++)
     if(i%j==0)
      printf("+%d",j);
     printf("n");
   }
 }