2012-05-08 3 views
6

나는 즉 √80020√2하지 28.2842712474619해야, 숫자를 계산, 대수적 정수의 제곱근을하지 단순화하고 싶습니다.단순화 제곱근은 수학적으로

나는 쌍으로 나와서 루트 아래에 나머지를 남겨 요인을 선택, 프로그래밍 :(

+11

인간이 수행하는 단계를 적어 줄 수 있습니까? 그것이 첫 번째 과제입니다. – GManNickG

+1

일부 Symbol 시스템 (모듈)을 의미합니까? http://code.google.com/p/sympy/ – wuliang

답변

29

인수 분해 루트 아래의 전화 번호를 통해이 문제를 해결 할 수있는 방법을 찾을 수 없습니다.

√800 = √ (2 × 2 × 2 × 2 × 5 × 2 × 5) = √ (2 2 × 2 2 × 5 2 × 2) = (2 × 2 × 5) = √2 20 √2

그리고 완성을 위해 여기에 간단한 대구 e :

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가 마지막 행에 여기에있다.

+0

cool을 보아주세요 :) +1에 코드 +1 – Sourav

+1

@Sourav : 그냥 +1 하시겠습니까? 왜 [녹색 ✓] (http://stackoverflow.com/faq#howtoask)하지 않습니까? – Johnsyweb

+1

놀랍도록 간단한 코드 +1! –

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; 
}