-2

私がやっていることを理解しているだけです。「x」の最大境界を設定してから、原始的なピタゴラスのトリプルをすべてリストしています。gcd 行と if ステートメント行でもエラーが発生します。どんなガイダンスも完全に役立ちます、ありがとう。

#include <stdio.h>

int main (){
  int x,y,z;
  int a,b,c;
  int max;

  //Get user input
  printf("What is the maximum bound on x?\n");
  scanf("%d", &max);

  y = 1;
  while (y < x) {

    while (x <= max) {

      if ((x%2 == 1 || y%2 == 1) && gcd(x, y) == 1) {
        return x;
      }
      else {
        a = (x*x)-(y*y);
        b = 2*x*y;
        c = (x*x)+(y*y);
      }
      printf("(%d, %d, %d)\n", a, b, c);
      x++;
      y++;
    }
  }

  return 0;
}
4

1 に答える 1

0

コードの問題:

  • inとuninitializedを比較yしています。withのすべてのペアが必要だと思います。xwhile (y < x)xx, yy < x <= max

  • returnプログラムを終了するとき。が素数 ( ) であり、プリミティブ トリプルを生成するために奇数の差 ( ) があるかどうかxを確認する必要があると思います。ygcd(x, y) == 1(x - y) % 2 == 1

  • を定義していませんgcd

したがって、次のことができます。

#include <stdio.h>

int gcd(x, y) {
    return y == 0 ? x : gcd(y, x % y);
}

int main () {
  int x, y, max;
  printf("Maximum x? ");
  scanf("%d", &max);

  for (x = 2; x <= max; x++)
    for (y = 1; y < x; y++)
      if (((x - y) % 2 == 1) && (gcd(x, y) == 1))
        printf("(%d, %d, %d)\n", x * x - y * y, 2 * x * y, x * x + y * y);
}
于 2015-02-27T23:34:20.817 に答える