다시 오신 걸 환영해요
한 가지 더 부탁할 게 있어요
이건 배열에 관한 거예요
네 배열 사용법과 배열에 접근하는 법 배열 생성법을
알려드리고 싶어요
3부터 100까지 모든 소수를 찾을 수 있는 C 프로그램을
만드세요
아주 효율적으로 할 거예요
배열을 사용하게 하는 작은 고리듬을 사용할 거예요
하지만 아주 간단한 프로그램이죠
3부터 100까지의 모든 소수를 출력으로 보여줄 거예요
0부터 3까지 하지 않는 이유는 그걸 하드 코드해야 하기 때문이죠
아주 간단해요
첫 두 소수는 0이 아닌 1과 2예요
이 프로그램엔 입력값이 없습니다 출력값만 있죠
그럼 출력은 비치 소수가 한 줄의 공백으로
분리되죠
100까지밖에 안 돼요
생성되는 모든 소수를 저장할
배열을 생성해야 하죠
첫 2개의 소수를 하드코딩할 수 있어요
소수 배열의 2와 3이죠
네 제가 상상하는 건 배열을 만들고 Prime이라고
이름 짓고 첫 2개를 하드코드하는 거예요
네 하드코딩하는 것도 중요해요 소수를
찾는 데 사용할 알고리즘이 다른 소수와 비교할 테니까요
그건 잠시 후에 설명할게요
100까지의 소수만 찾으려면 루프를 사용해야
해요
네 그러니까 지금 당장이라도 고리를 머릿속으로 그려서
소수를 표시해야 해요
네 그게 엔딩 루프가 되겠죠 프로그램의
엔딩 루프요 프라임 배열을 지나 그 안에 있는 모든 걸 보여줘요
네 이제 100까지의 소수를 모두 찾는다면 배열의 크기를
50개 이상으로 만들 필요는 없어요 100까지의 소수는
모두 50개 이상일 것 같지 않거든요 하지만 정확히 설정하는
건 불가능하죠 소수가 몇 개인지 모르니까요
프라임 배열을 만들 때는 100 사이즈를 만드세요
그러니 마지막에 프린트하려면 루프가 필요하죠
소수를 찾으려면 또 루프가 필요할 거예요
소수도 찾을 수 있어요 어떤 알고리즘이든 상관없어요 하지만
저라면 이런 걸 사용하겠어요 이 알고리즘을 쓰면 배열을 사용할 이유가 더 많아지니까요
네 그래서 소수를 식별하는 데 사용될
수 있는 기준은 이전의 소수에 의해 균일하게 분할되지 않으면 숫자를 소수로 간주한다는
겁니다
이 알고리즘도 있지만 그게
시작점이죠
특정 숫자에서만 검색하길 원하죠
따라서 최내측 루프의 안톡스 상태로 다음을 사용할 수 있죠
네 그래서 다시 여기서 필요한 건 아마도 루프가
2개 있어야 할 거예요
네 네 하단에서 세 번째 루프를 언급했죠
데이터를 프린트하는 거요 하지만 이 할당엔 루프가 2개 필요해요
지금 말씀드리는 알고리즘은 개선된 알고리즘이에요
그래서 하고 싶은 거군요
네 이제 다른 방법으로 소수를 찾고 싶다면 괜찮아요
배열을 사용한다면요 배정의 목적은
소수를 이해하는 게 아니라 배열 사용법을 이해하는 거니까요
이미 생성된 소수를 보면서요 배열을 사용하게 하고
저장합니다 생성되는 모든 소수를요 제가 말씀드렸듯이요
네 그걸 더 최적으로 만드는 또 다른 방법은 짝수를 보지 않는
겁니다
네 따라서 3부터 100까지의 숫자를 보면서 그게 소수인지
확인한다면 짝수는 무시해도 돼요 짝수는 절대 소수가 될
수 없으니까요
네 가장 바깥쪽 루프나 가장 안쪽 루프에선
프라임이 다른 프라임에 의해 분할되는지 확인할 수 있죠 너도 확인하고 건너뛸
수 있어
네 가장 안쪽 루프의 다른 축 조건은 p의 값이 소수의
제곱근을 넘지 않도록 하는 겁니다 그건 알고리즘의 다른 부분이에요
네 완전히 이해는 안 되겠지만 기본적으로 여러분이 따라야 할 기준이
몇 가지 있어요
네 짝수 확인은 건너뛰어요 짝수 확인은 건너뛰어요 알고리즘은
생성한 이전 소수를 찾아내고 p가 소수의 제곱근을
초과하지 않는지도 확인합니다 그게 소수를 확인하는 또 다른
방법이거든요
네 그래서 for 루프가 필요할 거예요 기본적으로
5부터 100까지죠 그런 다음 2까지 증가해 홀수만 찾도록
할 수 있어요
네 그 안에 있는 inner for 루프에서
1에서 이 값으로 가보죠 p를 소수/I로 나누면 소수/I보다 크다는
거죠
그 숫자는 소수가 아니란 걸 강조하고 싶을 거예요
네 특정 체크를 초과하지 않으려면 내부 루프에서 나와
소수를 찾아야 하죠
네 소수를 확인하는 방법은 현재 수가 이전 소수로 나뉘어
있는지 확인하는 거죠 소수 배열을 보세요
그 모듈러스가 0이면 소수가
아니죠
그렇죠 그렇지 않으면 이 전체 확인을 이 루프
전체에서 했는데 이미 프라임 서브 I가 프라임 서브
I보다 커져서 제곱 루트 문제를 해결했는데 실제로 소수를
못 찾았다면 그 말은 그 소수를 프라임 배열에 추가할 수 있다는 거죠 그런 다음 프라임
배열을 프린트하는 거예요
실제 알고리즘은 제가 만든 것만큼 헷갈리지 않아요
네 다시 한 번 슈도코드 힌트를 최대한 많이 드리려 했어요
외부 for 루프와 내부 for 루프에서요
네 하지만 배열에 접속해야
해요 배열을 읽어요 이전 값을 보기 위해 배열을 보죠
배열에 아주 익숙해질 거예요
그렇죠 행운을 빕니다 다음 강의에서는 더 이해하기 쉬운 해결책을
알려드리죠 요구 사항과 히트곡이 있어요
고마워요