shikwon96   2년 전

1일 경우 합산하지 않음

2,3,5,7 일 경우 합산

그외의 경우 2,3,5,7로 나누어 떨어지지 않으면 합산 

이렇게 구성했는데 어떤 부분이 틀렸는지 알려주시면 감사하겠습니다

jaa7963   2년 전

2,3,5,7만 확인하시면 안되고

100이라면 10까지는 확인해주어야합니다.

예를들어 16이 소수인지 아닌지 알기 위해서는 2부터 4까지 나누어떨어지는 수가 있는지 확인해주셔야합니다.

소수의 약수 2개중 1은 항상 포함되어있기 때문에 확인해주실 필요 없습니다.

왜 4까지 나누어봐야하냐면,

1,2,4,8,16을 보시면, 2와 8은 짝을 이루기 때문에, 2로 나누어떨어지면, 8로도 나누어 떨어지게 됩니다.

즉 어떤수가 x라면, x의 제곱근까지만 순회하면서 나누어지는 수를 구하면

저절로 모든 약수를 구하게 되는것이기 때문에, 반복문을 돌려서 2부터 int(x제곱근)까지 나누어보는

(ex) 보수적으로 16이라면 5까지, 27이라면 6 까지 나누어보는 방식으로 해보면 될 것 같습니다.)

코드를 구현해보시면 좋으실 것 같습니다.

shikwon96   2년 전

답변 감사합니다 

소수를

1은 소수가 아니므로 지우고 

소수 2를 남기고 2의 배수를 지우고 

소수 3을 남기고 3의 배수를 지우고 

소수 5를 남기고 5의 배수를 지우고 

소수 7을 남기고 7의 배수를 지우는 것으로 

로직을 구성했는데, 제 코드에 어떤 문제점이 있던건지 지적해주시면 감사하겠습니다

ahmg1216   2년 전

예를 들어서 11의 제곱의 경우 121입니다 소수가 아니므로 1을 더하면 안되는데 작성자분의 코드는 1을 더하게 됩니다 그외에도 최소인수가 11이상인 경우의 모든 수는 판별이 실패합니다 

ahmg1216   2년 전

아 모든수가 아닌 최소인수가 11이상인 모든  합성수일때 욥

jaa7963   2년 전

작성자 분께서 원하시는 방식으로 구현을 원하신다면, 에라토스테네스의 체 알고리즘을 구글링해서, 코드를 따라해보시는 것을 추천드립니다.

윗분 말씀대로 2,3,5,7 말고도 많은 소인수가 있으니깐요, 모든 소인수의 배수를 지워야만 정확한 답을 구해낼 수 있습니다.

shikwon96   2년 전

감사합니다

모든 소인수 케이스를 고려하지 못했네요 

답변이 많은 도움이 되었습니다

ahmg1216   2년 전

1000까지라 37까지의 소수만 고려하셔도 될듯합니다

댓글을 작성하려면 로그인해야 합니다.