【郑轻】[1753]Math Two!

文章字数:586

问题描述

问题分析

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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的那一种情况运算错误了

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#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
也就是代码应该这样写:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#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!

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...