소수인지 아닌지 알려주는 프로그램?
글쓴이: 세벌 / 작성시간: 일, 2014/06/15 - 6:26오전
어떤 수를 입력하면 그 수가 소수인지 아닌지 알려주는 프로그램을 찾아 봤습니다. 구글에게 물어보니
http://www.math.com/students/calculators/source/prime-number.htm 이런 게 나오네요.123456789123456789
가 소수인가 아닌가 해보니... It is divisible by 2. 라고 나오네요. 한 눈에 봐도 짝수는 아닌데...
아주 큰 숫자를 넣더라도 소수인지 아닌지 제대로 알려주는 프로그램은 어떻게 만들면 될까요?
프로그램언어별로 다양한 답이 나올 것 같네요 :)
Forums:
제가 만들어둔 소스도 참고해 보세요
결과가 정확한지는 모르겠고. 비슷한 정도 뿐 입니다. ㅡ_ㅡ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
http://en.wikipedia.org/wiki/
http://en.wikipedia.org/wiki/AKS_primality_test
아주 큰 수란 너무 막연하군요.
너무 막연합니다. 어차피 타입이라는 것이 한정된 공간을 사용하는 것이잖아요. 제일 큰 공간을 사용하는 타입의 한계를 극복하려면 클래스로 사용자 정의 타입을 새롭게 만드셔야겠군요. 일전에 제가 복사생성자에 대해 언급할 때 형식매개변수로 레퍼를 사용하지 않는 클래스는 대단하다는 말씀을 드린 적이 있습니다. 그 때 대부분 그 말 뜻을 이해하지 못하더군요. 레퍼런스가 느리다는 것을 말한 것이 아닙니다. 바로 새로운 타입이라는 관점에서 말씀드린 것이죠. 물론 레퍼런스로 형식매개변수를 사용하지 않을 경우에 해당 타입이 너무 커서는 곤란하다는 점을 말씀드리죠.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
소수 판별은 NP문제라고 알려져 있습니다. 몇몇
소수 판별은 NP문제라고 알려져 있습니다. 몇몇 특별한 경우를 제외하곤, 소수인지 판별하는 알고리즘은 기본적으로 그 수의 root되는 수까지 계속 나눠보는 방법 뿐입니다. 결국 숫자가 커질수록 exponential하게 계산량이 많아질수 밖에 없습니다.
판별 자체는 P 문제입니다.
판별 자체는 P 문제입니다.
엇 그러네요.. 암호론을 대강들었더니 이런 기본적인게
엇 그러네요.. 암호론을 대강들었더니 이런 기본적인게 헷갈렸군요...
위에 댓글을 보고 찾아보니 알고리즘들이 많군요. 이런
위에 댓글을 보고 찾아보니 알고리즘들이 많군요. 이런 종료의 문제를 임의의 큰수에 대해서 가장 간단하게 하는 방법은 python을 쓰는거죠. C/C++이라면 GMP를 써서 조금 귀찮게 구현할 수 있습니다.
소수면
약수가 1과 자기 자신 밖에 없는 수를 소수라고 하잖아요. 그러면 2부터 (그 자신-1)까지 반복문을 돌리면서 나머지가 0이 나오면 소수가 아닌 것으로 판별하면 되지 않을까요?
저런 알고리즘도 속도를 더 개선할 수 있는 여지가 있겠군요. 예컨데 그 자신을 절반으로 나눈 값을 사용하시면요.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
gilgil.net
1~root(n)까지만 확인해도 된다고 위에서 kaeri17님이 말씀하셨는데요.
www.gilgil.net
댓글 달기