2009-05-09 20:31:45來源不明

轉了一大圈

此題為本人出題,可能會有所錯誤!!

證明如下:

設n=k+N m=k k屬於正整數
  1|k+N|  k|
   | -k|   |
   _________

   | N|   |

那麼我可以知道 (n,m)=(N,k)<=N
那我可以知道(n,m)必定是N的因數,所以只要找N的最大質因數即可
N=1 就可以輸出Nothing了          因為1不是質因數...
N=0 就可以輸出Answer Is Too Big! 因為n跟m任意代要多大就多大

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

#include<stdio.h>  
#include<stdlib.h>  
#include<math.h>  
int math[5200]={0};  
main()  
{  
 int N,a,b,c,m=1;
 math[0]=2;  
 for(a=3;a<50000;a=a+2)
  {  
   int flag=0;  
   for(b=0;math[b]<=sqrt(a)&&b<m;b++)  
     if(a%math[b]==0)  
      {  
       flag=1;  
       break;  
      }  
    if(flag==0)  
     {  
      math[m]=a;  
      m++;  
     }  
  }
 while(scanf("%d",&N)==1&&N>=0)  
  {
   if(N==0) {printf("Nothing\n");continue;}
   if(N==1) {printf("Answer Is Too Big!\n");continue;}
   int max=0;
   for(a=0;math[a]<=sqrt(N);a++)  
    {
     if(N%math[a]==0&&math[a]>max) max=math[a];
     while(N%math[a]==0)  
        N=N/math[a];
      if(N==1)  
       break;
    }
    if(N!=1)
       if(N>max) max=N;
    printf("%d\n",max);
  }
 printf("別鬧了  這明明很簡單\n");
 return 0;
}