소인수분해 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
2번째 줄: 2번째 줄:
  
 
==개요==
 
==개요==
소수는 1을 제외한 [[자연수]] 중에서 [[약수]]가 1과 자기 자신밖에 없는 [[자연수]]를 말한다. [[소인수]]는 [[소수]]의 곱으로 나타낸 수를 말하고 소인수분해는 그 [[소인수]]들을 분해해서 [[소수]]를 나열한 것이다. 예를 들어, 12의 소인수분해는 <math>2\times2\times3</math>으로 분해되고 이것을 정리하여 <math>2^2\times3</math>의 형태로 나타낸다. 결과적으로 소인수분해는 어떠한 수를 [[소수]]로 분해하여 곱셈의 형식으로 표기하는 것이다.
+
소수는 1을 제외한 자연수 중에서 약수가 1과 자기 자신밖에 없는 자연수를 말한다. 소인수는 소수의 곱으로 나타낸 수를 말하고 소인수분해는 그 소인수들을 분해해서 소수를 나열한 것이다. 예를 들어, 12의 소인수분해는 <math>2\times2\times3</math>으로 분해되고 이것을 정리하여 <math>2^2\times3</math>의 형태로 나타낸다. 결과적으로 소인수분해는 어떠한 수를 소수로 분해하여 곱셈의 형식으로 표기하는 것이다.
  
 
==방법==
 
==방법==
# 어떠한 수를 가장 작은 [[소수]]로 나눈다.
+
# 어떠한 수를 가장 작은 소수로 나눈다.
# 나누어진 몫이 소수가 될때까지 계속 [[소수로]] 나눈다.
+
# 나누어진 몫이 소수가 될 때까지 계속 소수로 나눈다.
# [[소인수]]로 나타낸다.
+
# 소인수로 나타낸다.
# [[거듭제곱]]의 형태로 정리한다.
+
# 거듭제곱의 형태로 정리한다.
  
 
==예제==
 
==예제==
53번째 줄: 53번째 줄:
 
  }
 
  }
  
코드의 결합도를 낮추고 응집도를 높이기 위해 main() 함수에서는 factorization() 함수를 호출만 가능하도록 하였다. factorization() 함수에서는 일단 처리할 숫자 n을 정수형으로 선언하고 무한루프 안에서 scanf 를 통해 사용자로부터 입력받는다. n이 2보다 작으면 함수를 종료시키고 그게 아니면 필요한 변수들을 선언하기 시작한다. 우선 p는 2로 초기화되는데 이건 숫자 n을 나누어떨어지게 하면 소인수분해의 결과 중 하나가 되는 후보의 역할이다. primes[20]은 소인수분해의 결과를 저장해두기 위한 정수형 배열이고 index는 primes 배열에 인덱스 0부터 차곡차곡 소인수들을 넣기 위한 인덱스 변수이다. 그리고 출력에 사용할 반복용 변수 i 가 있다. 알고리즘은 n이 1이 될때까지 계속 루프를 돌리는데 n을 p로 나눈 나머지가 0이면 p는 소인수가 되므로 p를 primes[]의 적절한 위치에 넣고 index를 1 증가시킨다. 또한 n에는 n을 p로 나눈 값이 다시 할당된다. 그리고 p에 초깃값 2를 다시 할당한 다음 루프의 처음으로 돌아간다. n을 p로 나눈 나머지가 0이 아니면 p는 n의 소인수가 아니므로 p를 1 증가시킨 후 다시 루프의 처음으로 돌아간다. n이 1이 되면 완전히 나누어떨어져 더이상 소인수를 찾을 수 없음으로 소인수분해 찾기는 종료된다. 이때 index가 1이라면 이건 0번 인덱스에 하나의 숫자만 들어갔다는 뜻이 되므로 그 수는 소수라고 할 수 있다. 따라서 소수라고 출력해주고 아니라면 for 문에서 반복용 변수 i를 이용해 결과값을 하나씩 출력해준다. 이때 주의사항은 현재 index라는 값은 실제 유효한 값이 들어 있는 마지막 인덱스보다 1 크다는 것이다. 따라서 primes[] 배열의 인덱스 index-1까지의 값을 출력해줘야 하는데 마지막 값을 출력한 이후에는 index-2 까지 (숫자)<sup>x</sup>를 출력해주고 index-1은 그냥 숫자만 출력 후 줄 바꿈 해준다.<ref>Milvus Migrans, 〈[https://milvus.tistory.com/46 (C언어) 소인수분해]〉, 《티스토리》, 2012-04-09</ref>
+
코드의 결합도를 낮추고 응집도를 높이기 위해 main() 함수에서는 factorization() 함수를 호출만 가능하도록 하였다. factorization() 함수에서는 일단 처리할 숫자 n을 정수형으로 선언하고 무한루프안에서 scanf 를 통해 사용자로부터 입력받는다. n이 2보다 작으면 함수를 종료시키고 그게 아니면 필요한 변수들을 선언하기 시작한다. 우선 p는 2로 초기화되는데 이건 숫자 n을 나누어 떨어지게 하면 소인수분해의 결과 중 하나가 되는 후보의 역할이다. primes[20]은 소인수분해의 결과를 저장해두기 위한 정수형 배열이고 index는 primes배열에 인덱스 0부터 차곡차곡 소인수들을 넣기 위한 인덱스 변수이다. 그리고 출력에 사용할 반복용 변수 i 가 있다. 알고리즘은 n이 1이 될때까지 계속 루프를 돌리는데 n을 p로 나눈 나머지가 0이면 p는 소인수가 되므로 p를 primes[]의 적절한 위치에 넣고 index를 1 증가시킨다. 또한 n에는 n을 p로 나눈 값이 다시 할당된다. 그리고 p에 초기값 2를 다시 할당 한 다음 루프의 처음으로 돌아간다. n을 p로 나눈 나머지가 0이 아니면 p는 n의 소인수가 아니므로 p를 1 증가시킨 후 다시 루프의 처음으로 돌아간다. n이 1이 되면 완전히 나누어 떨어져 더이상 소인수를 찾을 수 없으므로 소인수분해 찾기는 종료된다. 이때 index가 1이라면 이건 0번 인덱스에 하나의 숫자만 들어갔다는 뜻이 되므로 그 수는 소수라고 할 수 있다. 따라서 소수라고 출력해주고 아니라면 for문에서 반복용 변수 i를 이용해 결과값을 하나씩 출력해준다. 이때 주의사항은 현재 index라는 값은 실제 유효한 값이 들어있는 마지막 인덱스보다 1 크다는 것이다. 따라서 primes[] 배열의 인덱스 index-1까지의 값을 출력해줘야 하는데 마지막 값을 출력한 이후에는 index-2 까지 (숫자)<sup>x</sup> 를 출력해주고 index-1은 그냥 숫자만 출력 후 줄바꿈해준다.<ref>Milvus Migrans, 〈[https://milvus.tistory.com/46 (C언어) 소인수분해]〉, 《티스토리》, 2012-04-09</ref>
  
 
* [[자바]](JAVA)
 
* [[자바]](JAVA)
142번째 줄: 142번째 줄:
 
* [[파이썬]]
 
* [[파이썬]]
 
* [[합성수]]
 
* [[합성수]]
* [[자연수]]
 
* [[소인수]]
 
* [[거듭제곱]]
 
* [[알고리즘]]
 
  
 
{{암호 알고리즘|검토 필요}}
 
{{암호 알고리즘|검토 필요}}

위키원에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 위키원:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)