質問

これが私のこれまでの私の方法です:

public static int[] simplifyRadical(int number) {
    int[] result = new int[2];
    for (int i = 1; i < number / 2; i++) {
        if ((i % number == 0)) {
            //IS a factor of the number in the radical
        }
    }
    return result;
}

私が使用している形式はです result[0] = number outside radicalresult[1] = number inside radical. 。これまでのところ、私の方法はすべての要因を取得します number (これは、ラジカルの最初の非plfied数です)。したがって、どうすれば初期を分割できますか number 完璧な正方形で、それの平方根を取得し、それを私に掛けます result[0] 変数。次に、完全な正方形が見つからなくなるまでループを続けます。この質問が読むのが混乱している場合は申し訳ありませんが、書くのは間違いなく混乱していました。明確化が必要な場合は、以下にコメントしてください。
アップデート:
だから数学的に私は回っています: sqrt(50) の中へ 5 sqrt(2) なぜなら sqrt(50) = sqrt(25 * 2) 25は5の完璧な正方形です。 5 sqrt(2) 形成されます。

役に立ちましたか?

解決

私があなたを正しく理解しているなら、あなたは急進的なものを単純化したいです。たとえば、99の平方根は、11の平方根3 xとして表すことができます。

これを2つの方法のいずれかにすることをお勧めします。


    1. nの平方根を取ります。 nが完全な正方形(つまり、nの平方根に小数値がない)である場合、ラジカルの下にない(またはa 1)で平方根値を返すだけです。そうしないと...

    2. nの平方根の間にループして2に丸みを帯びています。

      double nSquareRoot = Math.sqrt(n);
      int squareRootRounded = (int)nSquareRoot;
      //Here goes the first step of the algorithm
      //...
      for (int i = squareRootRounded; i>1; i--) 
      

      カウンターがnに均等に分割された場合(つまり、の線に沿って何か n % Math.pow(i,2)==0)その後、ラジカルの外側のカウンターで戻り、nをラジカル内でカウンターで分割します(たとえば、n = 99でカウンターが3にある場合、外側に3を配置し、99/9または11を内側に置きます)。または、コードでは、2人の力に均等に分割すると判断したら:

      result[0] = i; //Set outside the radical to the counter
      result[1] = n/s; //Set inside the radical to the n divided by s
      

      どこ s 私は2人の力に等しくなります。

    3. ループを通過し、均等に分割する完全な正方形を見つけることができない場合、急進的なものを簡素化することはできません。


    1. 数のすべての主要な要因を見つける(たとえば、99の主要な要因は3,3,11です)(数の主要な要因を見つけるためのサンプルCの実装を見つけることができます ここ, 、これはJavaに適応するのが難しくないはずです)。

    2. リスト内のプライムファクターのすべてのペア(3,3など)について、ラジカルの外側の数にそのプライムファクターを掛けます(3,3の場合、外部値に3を掛けます)。

    3. ペア(11など)に収まらないすべてのプライムファクターについて、ラジカル内の数にそのプライムファクターを掛けます。

お役に立てれば。これが完全にあなたが望むものではないなら、申し訳ありません。

最初のアルゴリズムを使用しても、2番目のアルゴリズムがどのように機能するかを確認する必要があります。 素因数分解, 、これを手作業で行うための便利なテクニック。

他のヒント

また、使用している場合 result[0]result[1] その後、あなたの宣言は次のとおりです。

double[] result = new double[2];

instead of

double[] result = new double[1];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top