HDU6441(费马大定理)

听队友说过结论:a^n + b^n = c^n在n > 2时无解。

勾股那里本菜数学不好直接暴举了Orz。

跟大家学一波勾股数的构造:a是奇数时,tmp = a / 2;  b = (tmp + 1) * tmp * 2;  c = b + 1;  举例:5、12、13.

a是偶数时,tmp = a / 2 - 1;  b = (tmp + 2) * tmp;  c = b + 2;  举例:8、15、17.

 

 1 #include <cstdio>
 2 #include <cmath>
 3 
 4 int T, n, a, l, r;
 5 
 6 void solve(int a) {
 7     for (int i = 1; i < a; i++) {
 8         if (a * a % i == 0) {
 9             int t = a * a / i;
10             if ((t - i) % 2 == 0) {
11                 l = (t - i) / 2;
12                 r = (t + i) / 2;
13                 return;
14             }
15         }
16     }
17 }
18 
19 int main() {
20     for (scanf("%d", &T); T; T--) {
21         scanf("%d %d", &n, &a);
22 
23         if (n > 2 || n == 0)  printf("-1 -1\n");
24         else if (n == 1) printf("%d %d\n", 1, a + 1);
25         else {
26             l = -1, r = -1;
27             solve(a);
28             printf("%d %d\n", l, r);
29         }
30     }
31     return 0;
32 }

 

posted @ 2019-04-03 23:58  AlphaWA  阅读(314)  评论(0编辑  收藏  举报