어서 오세요
네 데모를 보여드리고 싶어요 이전
과제의 해결책으로요 소수를 생성하는 프로그램을
작성하는 거였죠
네 다시 말하지만 이 프로그램의 목적은 배열을 사용하는
거였어요 배열과 실행에 대해 배우고 싶을 거예요
미리 프라임 숫자 알고리즘을 설명하려고 했어요
소수가 소수인지 아닌지 확인할
수 있어요
소수는 다른 소수에 의해 고르게
분배되지 않아요
이게 우리가 사용할 개념 알고리즘이에요
네 그래서 이게 소수인 거예요 소수 정수가 아니면 다수의
소수로 표현될 수 있거든요
20번 예에는 2와 5가 있는데요
네 그래서 이걸 알면 소수는 다른 소수에 의해 균등하게
분배되지 않아요
아주 효율적인 소수를 시험할 수 있어요
그래서 여러분이 할 수 있는 건 이전에 생성된
소수를 확인하는 거죠
네 그래서 이미 생성된 소수를 배열에
저장할 수 있어요 그렇게 이 정보를 찾을 수 있죠
네 또한 9개의 정수 n은 n의 제곱근보다 작거나
같은 정수를 가져야 합니다
네 따라서 주어진 정수가 소수인지 아닌지를 정수의 제곱근까지
모든 소수 요소에 대해 분할할할 수 있도록 테스트해보기만 하면
된다는 것입니다
여기서 멈추면 더 효율적이죠
네 이건 내부 루프에서 눈에 띌 거예요 제가 밖으로
나가서 소수를 못 찾았는지 확인할 때요
네 정수의 제곱근으로 가면 점프아웃을 할 수 있어요 출구 조건이죠
본질적으로요
네 한 번 살펴보죠 그걸 확인하는 방법은∙∙∙
p를 소수로 나누면 소수 서브 I보다 크다고 하는 거죠 그걸 가장 안쪽 루프에서 이용해
p의 값이 소수점 I의 제곱근을 초과하는지 테스트할 거예요
코드를 작성하기 위해 코드블록을 불러오죠
기본을 할 겁니다 여기서요, 프로젝트를 생성하죠
프로젝트 이름은 프라임으로 하죠
새 프로젝트로
가서 콘솔 응용 프로그램으로 가죠
프라임이라고 부를 거예요
다음 컴파일러를 사용하지 않겠다고 하죠
네 컴파일러를 갖고 놀았어요 컴파일러가 맞는지 확인하고
싶었죠 사이그윈 컴파일러를 사용할게요
메인 소서 파일을 생성하고 있는데 비어 있어요
printfand를 제거하고 코드를 작성하죠
스탠더드 황소라고 하는 아필레도 넣을 거예요
이건 아직 안 했어요 밑줄로 불리언을 발음했죠
작은 테스트를 해보죠 소울을 할 수 있어야 해요
이제 부울을 쓸 수 있어요
보통 C89에서 데이터 타입포 true 혹은 false는 _bool이죠
네 하지만 이후 버전과 표준 부울 파일에서 정의 형식을 가질 수 있어요 그냥
부울만 사용하고 true, false를 값으로
사용하도록 허용하죠
여기서 somevariable을 먼저 만들어야 해요
counter를 생성하겠습니다 그냥 p라고 부를게요
그게 루프에 대한 대응이 될 겁니다 p에서
100 숫자까지 확인할 때요
그게 외부 루프예요
내부 루프 카운터를 위해 수집할 수 있는 것도 만들 거예요
여기서 지난 소금을 확인하죠
이 루프에서 초기화할 거예요
네 이제 배열을 만들 건데요 배열은 소수의 정수이고
크기는 50이 될 거예요
지금은 0 이하로 초기화하지 않을 거예요
네 그런 다음 소수 인덱스를 생성하면
모든 짝수 숫자는 건너뛰게 됩니다 그걸 2로 설정하죠
네 네 이 변수는 올바른 인덱스에서 시작하도록
할 것입니다 왜냐하면 처음 2개의 숫자를 하드코드 할 것이기 때문입니다
그것부터 할 거예요
첫 번째 소수 2개를 하드 코딩할 거예요
이렇게 배열에 접근할 수 있어요
네 10번째 줄에서 배열을 만드는 법은 알죠 데이터 형식을 지정하고
이름을 입력하면 돼요 그런 다음 대괄호에서 크기를 지정하죠
그리고 전부 0으로 설정할 거예요 이게 우리가 할
수 있는 C99 특성이죠
데이터를 배열에 할당하려면 그냥 배열 이름 다음에 인덱스
값을 쓰면 돼요
배열은 0이에요
프라임 서브-0으로 할게요
첫 번째 소수는 2가 될 거예요
2는 첫 번째 소수예요
두 번째 소수는 3이어야 해요
몇 개의 prime3numers를 가지고
추가 프라임을 찾기 위해 미리 테스트할 수 있는 것이죠
이제 루핑이 나오네요
OUTER FORLoop이 필요해요 5부터 100까지의
모든 숫자를 검토하는 거죠
4는 소수가 아니잖아요 5부터 시작할게요
네 4 p = 5 p = 100보다 작거나 같다 그런 다음 짝수 숫자는
건너뛰죠
p = p + 2라고 해보죠
숫자를 볼 필요는 없어요 그게 외부 루프니까요
그리고 가다가 베팅을 해야 돼요
네 Boolean 변수도 설정하겠습니다 소수를 찾았는지 아닌지
알려주는 변수입니다
여기서 bool을 사용할 수 있어요. 로컬 변수 Boolean
is prime31을 만들게요.
그렇죠 true로 초기화하도록 하겠습니다 왜냐하면 거짓으로 설정할
때는 이전에 생성된 프라임의 전체 리스트를
살펴보거나 최신 프라임으로 가서 제곱근이 아닌 것을 확인해야 하기 때문이죠
prime31은 5에서 100까지의 반복을 bequal에서
true로 바꾸고 2는 건너뛰죠
이제 내부 루프는 우리가 이전에 생성한 모든 소수를
훑어볼 거예요
I의 제곱근을 능가하지 않도록요
네 그래서 제곱근이 나올 때까지 이 숫자들을 쭉 훑어볼 거예요 x 조건을
정할 수 있습니다
소수를 찾았으니 종료도 해야죠
이렇게 해보죠 if prime31이 참이면 우리 한계는 통과한
거죠 p를 prime31로 나누면 prime31 sub-I는 prime31보다
크거나 같아요
그런 다음 ++I는 루프 컨트롤 변수예요
알고리즘을 위한 키죠
그래서 5번부터 100번까지 소수를
전부 찾아서 짝수를 생략할 거예요
네 내부 루프에서 1에서 시작해 프라임에서
참으로 설정하거나 출구 조건에 도달할 때까지요 숫자 p를 프라임 sub-i로
나누면 프라임 sub-i보다 크니까 제곱근을 찾았을
때 종료되는 거죠 그게 알고리즘의 또 다른 조건이거든요
그게 우리 루프라면 루프 안에서 프라임을
확인할 거예요
소수의 숫자는 숫자로 나누는 거예요
A0이 없으면 가도 돼요
P 모드프라임 서브-I = 0만 입력하면 되죠
그게 사실이라면 당신은
소수가 아니에요
TheBoolean= false로 설정할 수 있어요
네 전체 루프에서 그렇게 합니다 부울을
거짓으로 설정할 거니까요
소수를 그럼 소수를 못 찾았다는 뜻이니 소수에
p를 추가할 수 없죠
네 좋아요 마지막으로 할 일은 불리언이 참으로 설정됐는지 확인하는 겁니다 true로
설정되어 있다면 배열을 채워야 합니다
배열에 추가하고 싶어요 배열을 읽으면 소수가 나오죠
Prime을 입력하고 prime31 인덱스를 입력하죠
왜냐하면 기억하세요 이건 인덱스로 대표되는 것으로
배열에 넣을 곳을 나타내죠 인덱스는 3번 요소에서 시작합니다
인덱스 2죠
네 그러니 배열에서 올바른 위치에 두도록 해야죠 그리고 p로
설정합니다 p는 우리가 찾은 소수니까요 왜냐하면 기억하세요 이건 for 루프 외부입니다
그게 소수인지 확인하려는 거예요
5시에 시작해요
네 만약 5가 소수가 된다면 이 숫자들로 가서 1에서 시작해 이전의 다른
소수와 비교해 0으로 나누어지지 않으면 괜찮은
거죠 모든 것에 그렇게 해야 해요
마지막으로 해야 할 일은 prime31 인덱스를
증가시키는 것이죠
그래서 prime31을 찾으면 올바른 인덱스에 있는 거죠
그게 다예요
이게 소수를 찾는 통로예요
저장하고 빌드하고 모든 게 괜찮은지 확인해야죠
우린 괜찮아요
전 표준 소울을 포함해 거짓 정보를 추가하는 걸 좋아해요
그걸 잊지 마세요
마지막으로 할 일은 소수를 프린트하는
거예요
간단한 for 루프를 가질 수 있어요
같은 줄에 프린트할 거예요 라인 피드는 추가하지
않고요
그래서 우린 루프 컨트롤 변수를 0
I로 다시 인스턴트화할 거예요
네 이제 prime 인덱스로 가보죠 이 배열에 있는
모든 것의 크기죠 한 줄로 프린트할게요 % I,
d, prime sub-I
그리고 마지막에 라인 피드를 추가할 거예요
세미콜론이 들어간 그런 거요
하지만 이 프로그램은 많은 걸 강조해요
먼저, 움푹 들어간 걸 보세요 모든 블록이 움푹 들어갔죠
네 네 가끔 괄호를 사용하죠 블록 안에 하나 이상의 구문이
있을 때요 안 그럴 때도 있어요
라인25의 이 if문에서는 괄호를 사용하지 않았죠
루프는 지금쯤이면 제2의 본성이 돼야 해요
이것으로 할당해야 하는 건 배열이에요
프라임이라 불리는 배열을 만들고 있어요 사이즈는 50, 모든 걸 0으로 초기화하죠
네 첫 두 요소를 2와 3으로 설정하면
이 알고리즘이 19부터 32행까지 이전 소수의 배열을
보고 소수가 맞는지 판단해요
제곱근보다 재생성됐을 때 도약할 수도 있고요
네 여기 보면 대괄호가 많죠? 액세스 배열과
배열에 값을 할당하는 거요 아주
간단해요
일단 만들어 보고 어떻게 되는지 보죠
경고도 오류도 없어요
네 이걸 실행하면 모든 소수가 출력됩니다 100:2부터 3
5까지죠 7 11 13 17 19 23 29 31 37 41 43 등등
그건 다 소수예요
소수는 그 자체로 하나의 요소일 뿐이죠
그걸 다른 숫자로 나누면 나머지가 없어요
97은 1과 97을 포함하는 두 가지 요소예요
짧고 간결한 프로그램이죠
제가 해결할게요
분석해 보세요
다시 한 번 중요한 건 제가 사용한 배열과 표준 부울이에요
부울 데이터 타입을 만들 수 있게 해줬죠
밑줄 b 없이요 또한 1과 0 대신 true
값을 사용할 수 있게 해줬죠
도움이 됐으면 좋겠네요 고마워요