프로그래밍/백준

[2960] 에라토스테네스의 체

ajdanddl 2019. 8. 18. 21:40
반응형

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
 
int main() {
    int arr[1000= { 0, }, num, when, count = 0;
    scanf("%d %d"&num, &when);
    //arr = (int*)malloc(sizeof(int)*num);//런타임에러 발생
    for (int i = 2; i <= num; i++)
        arr[i] = i;
    for (int i = 2; i <= sqrt(num); i++) {
        if (arr[i] == 0)
            continue;
        for (int j = i + i; j <= num; j += i)//합성수는 모두 0으로 채운다.
            arr[j] = 0;
    }
 
    
    for (int i = 2; i <= num; i++) {
        if (arr[i] != 0 && arr[i] != 1) { //소수를 찾으면
            for (int j = i; j <= num; j += i) {//헐랭..j+=arr[i]는 제대로 인식이 안되고 계속 1씩 증가한다. i와 arr[i]는 항상 같은데 왜 그럴까. 내 생각엔 for문 증감식에서 배열을 사용하면 안되나보다
                if(arr[j]!=1)
                    count++;//카운트 해주고
                if (count == when) {
                    printf("%d", j);
                    break;
                }
                arr[j] = 1;//그 소수와 그의 배수는 1로 만들어준다
            }
        }    
        else//1이면 아까 체크 됐으니까 넘어가기
            continue;
    }    
}
cs

 

배열 동적할당을 했는데 런타임 에러가 떴다..결국 최대 개수인 1000을 배열 크기로 잡았다.

그리고 for문 증감식에다가 배열을 사용하면 인식이 안되나보다.

왜냐하면 처음에 22번째 줄 for문의 증감식에다가 i 대신 arr[i]를 넣어줬는데 j가 계속 1씩 증가가되었다.

결국 한참 헤메다가 혹시나해서 i로 바꿔줬는데 됐다. (i와 arr[i]가 같았기 때문에 이와 같이 수정할 수 있었다.)

 

결국 컬러스크립터를 쓰는 방법을 알아냈다.

크롬 브라우저를 사용하고 있는데 컬러스크립터에서 클립보드로 복사 버튼을 누르니 뭔가를 지원하지 않는 브라우져라고 떴다.

결국 HTML로 직접 입력했는데 방법은 위에 기본모드를 HTML로 바꾸고 컬러스크립터에서 복사한 코드를 넣어주면 된다

반응형

'프로그래밍 > 백준' 카테고리의 다른 글

[1920] 수 찾기  (0) 2019.07.27
[2579]계단오르기  (0) 2019.07.07