轉了一大圈
此題為本人出題,可能會有所錯誤!!
證明如下:
設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;
}
上一篇:退休的福利