[백업][가리사니] 소수 구하기 코드
java

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

public static int[] 소수(int max)
{
	if (max < 2) { return new int[0]; }

	int[] map = new int[max / 2 + 1];
	map[0] = 2; // 2 를 세팅

	int maxArraySize = 1;
	for (int n = 3 ; n <= max ; n+=2)
	{
		map[maxArraySize++] = n;
	}

	// 배열 0번 2는 예외처리
	int zeroCount = 0;
	for (int i = 1 ; i < maxArraySize ; i++)
	{
		int div = map[i];
		if (div == 0) { continue; }
		// 3번도 예외처리
		for (int j = 2 ; j < maxArraySize ; j++)
		{
			int target = map[j];
			// 대상이 같거나 || 예외처리 결과인 0일 경우 뛰어넘는다.
			if (target == div || target == 0)
			{
				continue;
			}
			else if (target % div == 0)
			{
				zeroCount++;
				map[j] = 0;
			}
		}
	}

	int rv[] = new int[maxArraySize - zeroCount];
	for (int i = 0, pos = 0 ; i < maxArraySize ; i++)
	{
		int num = map[i];
		if (num != 0)
		{
			rv[pos++] = num;
		}
	}

	return rv;
}