728x90
제곱 ㄴㄴ 수
https://www.acmicpc.net/problem/1016
<코드>
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 36 37 38 | #include <stdio.h> long long numbers[1000001]; long long prinum[10000]; int main(void){ long long max, min; long long num; int prinum_num = 0; int count = 0; scanf("%lld %lld", &min, &max); for (long long i = 2; i*i <= max; i++){ long long x = min / (i*i); if (min % (i*i) != 0) x++; while (x*(i*i) <= max){ numbers[x*(i*i) - min] = 1; x++; } } for (int i = 0; i <= max - min; i++){ if (numbers[i] == 0) count++; } printf("%d\n", count); return 0; | cs |
<문제 푼 요령>
1. 에라토스테네스 체를 사용한다.
2. 문제의 핵심은 min + 1,000,000 즉 저장되여야 할 배열의 숫자가 한정적이다.
3. 탐색을 min ~ max 까지만 하면된다.
4. 탐색하는 숫자의 범위는 i는 2부터 max >= i*i 까지 탐색을 해서 채워나간다.
5. 마지막에 남는 숫자들이 소수 ㄴㄴ 수이다.
6. 소수만 이용해서 풀면 더 빠른 시간복잡도가 나올거 같다.
728x90
'Algorithm > 수학' 카테고리의 다른 글
[백준][3046번][수학] R2 (0) | 2016.04.24 |
---|---|
[백준][1549번][수학] K (0) | 2016.03.27 |
[백준][1978번][수학] 소수찾기 (0) | 2016.03.27 |
[백준][1446번][수학] 지름길 (0) | 2016.03.23 |
[백준][1788번][수학] 피보나치 수의 확장 (0) | 2016.03.23 |
댓글