2009-01-15 16:30:47來源不明

2007 NPSC B. 友好數

/***********************************************************/

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #include<math.h>   
  4. #include<string.h>   
  5. main()   
  6. {   
  7.  int x,y,a,b,c,d;   
  8.  while(scanf("%d",&x)==1&&x!=0)   
  9.   {   
  10.     c=0;d=0;    
  11.    for(a=1;a<x;a++)   
  12.     {   
  13.      if(x%a==0)   
  14.        c=c+a;        /*算出X的因數總和=友好數?!*/    
  15.     }                                
  16.    for(b=1;b<c;b++)      
  17.     {   
  18.      if(c%b==0)   
  19.       d=d+b;    /*算出C的因數總和 倒推回去 算出友好數的因數和*/    
  20.     }     
  21.     if(d==x&&x!=c)   /*判斷因數和相等 但是 此數不等於他的因數和*/    
  22.      printf("%d\n",c);    
  23.     else if(d==x&&x==c)   
  24.      printf("=%d\n",x);   
  25.     else  
  26.      printf("0\n");    
  27.   }      
  28.  return 0;    

/****************************更快的版本************************/

  1. #include<stdio.h>      
  2. #include<stdlib.h>      
  • #include<math.h>      
  • main()      
  • {      
  •  int x,y,a,b,c,d;      
  •  while(scanf("%d",&x)==1&&x!=0)      
  •   {      
  •     c=0;d=0;       
  •    for(a=1;a<=(int)sqrt(x);a++)      
  •     {      
  •      if(x%a==0)      
  •        c=c+a+(x/a)*(x/a!=a&&a!=1);              
  •     }                                   
  •    for(b=1;b<=(int)sqrt(c);b++)         
  •     {      
  •      if(c%b==0)      
  •       d=d+b+(c/b)*(c/b!=b&&b!=1);        
  •     }        
  •     if(d==x&&x!=c)   /*判斷因數和相等 但是 此數不等於他的因數和*/       
  •      printf("%d\n",c);       
  •     else if(d==x&&x==c)      
  •      printf("=%d\n",x);      
  •     else     
  •      printf("0\n");       
  •   }         
  •  return 0;       
  • }