728x90
반응형
소수를 찾는 대표적인 방법중 하나
" k=2 부터 √N 이하까지 반복하여 자연수들 중 k를 제외한 k의 배수들을 제외시킨다"
최근에 알고리즘을 기초부터 다시 공부하다가 알게되었다.
public class Eratos {
public static void main(String[] args) {
// ArrayList로 구현
ArrayList<Boolean> primeList;
// 사용자로부터의 콘솔 입력
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
// n <= 1 일 때 종료
if(n <= 1) return;
// n+1만큼 할당
primeList = new ArrayList<Boolean>(n+1);
// 0번째와 1번째를 소수 아님으로 처리
primeList.add(false);
primeList.add(false);
// 2~ n까지 소수로 설정
for(int i=2; i<=n; i++ )
primeList.add(i, true);
// 2부터 ~ i*i <= n
// 각각의 배수들을 지워간다.
for(int i=2; (i*i)<=n; i++){
if(primeList.get(i)){
for(int j = i*i; j<=n; j+=i) primeList.set(j, false);
//i*i 미만은 이미 처리되었으므로 j의 시작값은 i*i로 최적화할 수 있다.
}
}
StringBuffer sb = new StringBuffer();
sb.append("{");
for(int i=0; i<=n; i++){
if(primeList.get(i) == true){
sb.append(i);
sb.append(",");
}
}
sb.setCharAt(sb.length()-1, '}');
System.out.println(sb.toString());
}
}
출처:
728x90
반응형
'언어 > JAVA' 카테고리의 다른 글
request.getRemoteAddr()로 정확한 IP 추출이 되지 않을 때.. (0) | 2023.05.11 |
---|---|
배열 복사 : clone() 과 arraycopy() (0) | 2022.11.09 |
JAVA 엑셀다운로드시 파일명 한글 오류 (0) | 2022.11.08 |
첨부파일 다운시 파일명 공백이 +로 뜨는 부분 해결 (0) | 2022.11.08 |
poi 엑셀 셀 병합 (0) | 2022.08.31 |