8

整数の平方根を数値的に計算するのではなく、代数的に単純化したい、つまり√80028.2842712474619ではなく20√2にする必要があります。

プログラミングでこれを解決する方法が見つかりません:(

4

2 に答える 2

32

根の下の数を因数分解し、ペアで出てくる因数を選び出し、残りを根の下に残します。

√800 = √(2 x 2 x 2 x 2 x 5 x 2 x 5) = √(2 2 x 2 2 x 5 2 x 2) = (2 x 2 x 5)√2 = 20√2。

完全を期すために、ここにいくつかの簡単なコードを示します。

outside_root = 1
inside_root = 800
d = 2
while (d * d <= inside_root):
  if (inside_root % (d * d) == 0): # inside_root evenly divisible by d * d
    inside_root = inside_root / (d * d)
    outside_root = outside_root * d
  else:
    d = d + 1

アルゴリズムが終了すると、outside_root と inside_root に答えが含まれます。

ここでは 800 で実行します。

 inside   outside   d
    800         1   2 # values at beginning of 'while (...)'
    200         2   2
     50         4   2
     50         4   3
     50         4   4
     50         4   5
      2        20   5 # d*d > 2 so algorithm terminates
     ==        ==

答え 20√2 は最後の行にあります。

于 2012-05-08T05:11:59.137 に答える
0
#include<stdio.h>
#include<conio.h>
int main() {
    int i, n, n2, last, final;
    last = 0, final = 1;
    printf("Enter number to calculate root: ");
    scanf("%d", & n);
    n2 = n;
    for (i = 2; i <= n; ++i) {
        if (n % i == 0) {
            if (i == last) {
                final = final * last;
                last = 0;
            } else {
                last = i;
            }
            n /= i;
            i--;
        }
    }
    n = n2 / (final * final);
    printf("\nRoot: (%d)^2 * %d", final, n);
    getch();
    return 0;
}
于 2012-05-08T05:50:55.757 に答える