게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
와... 뭘 고쳤는지 모르겠는데 제대로 고쳤나봐요^______^ (함박웃
게시물ID : programmer_7756짧은주소 복사하기
작성자 : 광패
추천 : 2
조회수 : 537회
댓글수 : 4개
등록시간 : 2015/01/21 18:23:07
알고리즘 공부를 시작한 학생인데요

오늘 비트마스크에 대해 공부했는데 소수를 구하는 알고리즘을 짜고 있었어요

그런데 이놈이 4시간동안 인터넷 찾고 고치고 반복을 해도 안되더니

질문할 생각으로 코드를 좀 보기 이쁘게 고쳤는데
정상적으로 실행이 되네요...??? ㅎㅎ.....
그래서 기분이 무지 좋습니다. 하하하

그나저나 시중에 C 또는 C++관련 책만 나와있어서 굉장히 속상하네요
자바 개발자들을 위해서 자바로 된 책들이 많이 나왔으면 좋겠습니다.

이게 그 문제의 에라토스테네스의 체를 비트마스크로 구현한 소스코드 입니다.
(소스가 지저분하고 허접한건 빨리 풀고싶은 급한마음에... ㅎㅎ)
package bitMask;

public class Eratos {
public int n;
public final static int MAX_N=100;
public char[] sieve=new char[(MAX_N+7)/8];
Eratos(int n){
this.n=n;
}
public boolean isPrime(int k){
if((sieve[k>>3] & (1<<(k&7))) >0)
return true;
else
return false;
}
void setComposition(int k){
sieve[k>>3] &= ~(1<<(k&7));
}
void eratos(){
for(int i=0;i<sieve.length;i++)
sieve[i]=65535;
setComposition(0);
setComposition(1);
int numSize=n;
for(int i=2;i<=numSize;i++)
if(isPrime(i))
for(int j=i*i; j<=n; j+=i)
setComposition(j);
}
/*public void printEratos(){
for(int i=0;i<sieve.length;i++)
System.out.print((int)sieve[i]+" ");
}*/
public static void main(String[] args){
Eratos sample=new Eratos(100);
sample.eratos();
//sample.printEratos();
for(int i=0; i<100; i++){
System.out.print(i+"="+sample.isPrime(i)+" ");
if(i%10==0)
System.out.println();
}
}
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호