【郑轻】[1753]Math Two!

这里写图片描述
这里写图片描述

当时心里想:
“数据给的不大
暴力遍历就好了……”
包括刚才也是这么想的
但是仔细一看我这一题没对啊……
也就是这个:

#include<stdio.h>
#include<math.h>
int main() {
    int min,a,b,c;
    int n,x,y,z;
    scanf("%d",&n);
    for(min=300,x=1; x<=100; x++) {
        for(y=x; y<=100; y++) {
            for(z=y; z<=100; z++) {
                if((pow(x,n)+pow(y,n))==pow(z,n)&&min>(x+y+z)) {
                    min=x+y+z;
                    a=x;
                    b=y;
                    c=z;
                }
            }
        }
    }
    if(min!=0)
        printf("%d %d %d\n",a,b,c);
    else
        printf("-1\n");
    return 0;
}

根据郑轻OJ上的是WA
然后给出应该是 -1 结果我是输出的 1 40 40
也就是对n=10的那一种情况运算错误了

本以为是数据范围的问题
然后重新写了一下:

#include<stdio.h>
#include<math.h>
int main() {
    double min,n,x,y,z;
    scanf("%lf",&n);
    for(x=1; x<=100; x++) {
        for(y=x; y<=100; y++) {
            for(z=y; z<=100; z++) {
                if(pow(x,n)+pow(y,n)==pow(z,n)) {
                    printf("%.lf %.lf %.lf\n",x,y,z);
                    x=y=z=102;
                }
            }
        }
    }
    if(x<102)
        printf("-1\n");
    return 0;
}

但是发现对n=10的还是不对
仔细想想100的10次方的运算确实数据好大

然后百度了一下
这一题好像涉及到了费马大定理……

百度百科:费马大定理

然后指出:

费马大定理,又被称为“费马最后的定理”,由法国数学家费马提出。
它断言当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。
被提出后,经历多人猜想辩证,历经三百多年的历史,最终在1995年被英国数学家安德鲁·怀尔斯证明。

所以这一题应该是当
n==1||n==2 时输出结果
n>2时都是应该输出-1
也就是代码应该这样写:

#include<stdio.h>
int main() {
    int n;
    scanf("%d",&n);
    if(n==1)
        printf("1 1 2\n");
    else if(n==2)
        printf("3 4 5\n");
    else
        printf("-1\n");
    return 0;
}

上传之后AC了……
-.-

话说人家的学校11月份就做这题?
唉……
看来果然还是一直被压制啊……

题目地址:【郑轻】[1753]Math Two!

posted @ 2015-12-21 20:20  BoilTask  阅读(12)  评论(0编辑  收藏  举报