안녕하세요 답변 달아주시느라 고생 많으십니다
다름이 아니라 이 알고리즘에서 a[i] 가 어떻게 짝수를 0으로 판별하는지 몇 번을 봐도 이해가 가지 않아
질문드렸습니다
안녕하세요 길벗수험서 운영팀입니다.
먼저 해당 알고리즘은 각 수의 배수를 싸그리 0으로 치환해버리면서 소수를 구하는 알고리즘입니다.
a가 b의 배수라는 것은, b가 a의 약수라는 뜻이고, 약수를 가진 수라는 것은 소수가 아님을 의미하니까요. (b는 2 이상)
코드에서는
a[0]=2, a[1]=3, a[2]=4, a[3]=5, a[4]=6 .... a[98]=100 이렇게 저장됩니다.
배열의 위치값을 가리키는 i가 처음 0일 때,
12. m = 0
반복 시작
13. m = m + 2 - a[i]가 2이므로
15 a[2] = 0
반복 끝
즉, a[0]부터 위치가 2씩 증가하면서 배열에 저장된 값을 0으로 치환해버리죠.
결국 4, 6, 8, 10, 12, ..., 100을 저장한 2의 배수(짝수)가 0으로 바뀌게 되는 것입니다.
행복한 하루되세요 :)
-
관리자2020-07-22 17:48:05
안녕하세요 길벗수험서 운영팀입니다.
먼저 해당 알고리즘은 각 수의 배수를 싸그리 0으로 치환해버리면서 소수를 구하는 알고리즘입니다.
a가 b의 배수라는 것은, b가 a의 약수라는 뜻이고, 약수를 가진 수라는 것은 소수가 아님을 의미하니까요. (b는 2 이상)
코드에서는
a[0]=2, a[1]=3, a[2]=4, a[3]=5, a[4]=6 .... a[98]=100 이렇게 저장됩니다.
배열의 위치값을 가리키는 i가 처음 0일 때,
12. m = 0
반복 시작
13. m = m + 2 - a[i]가 2이므로
15 a[2] = 0
반복 끝
즉, a[0]부터 위치가 2씩 증가하면서 배열에 저장된 값을 0으로 치환해버리죠.
결국 4, 6, 8, 10, 12, ..., 100을 저장한 2의 배수(짝수)가 0으로 바뀌게 되는 것입니다.
행복한 하루되세요 :)
-
관리자2020-07-22 19:32:25
안녕하세요 길벗수험서 운영팀입니다.
a[m]의 값을 0으로 치환하는데, m의 값은 a[i]의 값 즉 2만큼 씩 증가합니다.
즉 치환되는 배열의 요소는
a[2], a[4], a[6], a[8], ... a[98]이 되는 것이죠. 이 배열에는
4, 6, 8, 10, ... 100이 저장되어 있고요.
이것이 첫회입니다.
2와 3은 코드의 알고리즘 상 초기화될 일이 있을 수 없죠.
이건 코드를 한 줄 씩 디버깅해 가시면서 각 변수와 배열의 값 변화를 추적해보시는 것을 권해드립니다.
소수를 구하는 과정은 앞서 설명드린대로입니다.
2부터 98까지 각 수의 배수를 0으로 초기화한다. 라는 것은 약수를 가진 모든 수를 소수에서 제외한다는 뜻으로, 약수를 가지지 않았다는 것은 소수라는 의미가 되죠.
소수 : 1과 자기수 외의 약수가 존재하지 않음
(191쪽의 알고리즘의 이해를 다시 한 번 정독해보세요.)
행복한 하루되세요 :)
-
*2020-07-22 18:18:43네 그러면 2, 3, 4, 다 0이 돼야 하는 거 아닌가요..? 소수는 어떤 과정으로 0이 안 되는 건 가요 ㅠㅠ 친철하신 답변 감사드립니다!