Find Integer-费马大定理

  • Find Integer

  •  HDU - 6441 
  • 它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。
  • 所以 对大于二 与0进行特判处理1,2.
  • 当n==2时 利用平方差公式 a^2=c^2-b^2=(c+b)*(c-b);
  • 只需查询a^2的因子判断是否成绩因子相加为偶数 
  • 如果是偶数那么b,c可以求出。
  • c=(小因子+大因子) / 2.  b=c-小因子。
  • #include<stdio.h>
    #include<cmath>
    using namespace std;
    long long t,n,a,b,c;
    int main()
    {
        scanf("%lld",&t);
        while(t--)
        {
            scanf("%lld%lld",&n,&a);
            if(n>2||n==0)
                printf("-1 -1\n");
            else
            {
                if(n==1)
                {
                    printf("1 %lld\n",a+1);
                }
                else
                {
                    long long x=a*a;
                    int flog=0;
                    for(int i=1; i<=a; i++)
                    {
                        if(x%i==0)
                        {
                            long long tx=x/i;
                            if((tx+i)%2==0)
                            {
                                b=((tx+i)/2-i);
                                c=((tx+i)/2);
                                printf("%lld %lld\n",b,c);
                                flog=1;
                                break;
                            }
                        }
                    }
                    if(flog==0)
                        printf("-1 -1\n");
                }
            }
        }
        return  0;
    }

猜你喜欢

转载自blog.csdn.net/BePosit/article/details/82054583