fork download
  1. #include <stdio.h>
  2.  
  3. /*
  4. 問題: A^X + B^Y = 2017 を満たすA,X,B,Yを求めよ。ただし、A,X,B,Yは2以上の自然数とする
  5.  
  6. 解答: 右辺は素数であり、かつ奇数であるから左辺も奇数でなければならない。
  7. したがって、A^X と B^Y の偶奇性は一致してはならない。さもなくば、左辺=偶数となり等号が成立しない。
  8. いま、A^Xが偶数^Xの形で表されると仮定する。このとき、B^Yは奇数^Yの形でなければならない。
  9. A,B,X,Yは2以上の自然数であるから、A^Xの取り得る値の範囲は
  10. 2^2 <= A^X <= 44^2 = 1936 < 2017
  11. 一方、B^Yの取り得る値の範囲は 3^2 <= B^Y <= 43^2 = 1849 < 2017
  12. となる。
  13. A^Xが奇数^X、B^Yが偶数^Yの形で表されるときも上と同様である。
  14. 以上のことから、上記の範囲において候補となる解を探索すればよい
  15. */
  16.  
  17. int main(void) {
  18. // your code goes here
  19. int n = 2017;
  20. int a,b,x,y;
  21. int s = 1,t = 1;
  22. int i,j;
  23. for(a = 2;a <= 44;++a)
  24. {
  25. for(b = 3;b <= 43;++b)
  26. {
  27. for(x = 2;;++x)
  28. {
  29. for(i = 0,s = 1;i < x;++i) s *= a;
  30. if (s > n) break;
  31. for(y = 2;;++y)
  32. {
  33. for(j = 0,t = 1;j < y;++j) t *= b;
  34. if (t > n) break;
  35. if ((s + t) == n)
  36. printf("%d^%d + %d^%d = %d\n",a,x,b,y,n);
  37. }
  38. }
  39. }
  40. }
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 2168KB
stdin
Standard input is empty
stdout
12^3 + 17^2 = 2017
17^2 + 12^3 = 2017
44^2 + 3^4 = 2017
44^2 + 9^2 = 2017