비트 배열이 prime[]
인 unsigned int
입니다. 이 배열을 사용하여 각 비트에 숫자 n
을 나타내는 에라 토 스테 네스 체를 구현하고 싶습니다. 즉, n
이 주어지면 n
에 해당하는 비트를 보유하는 배열 요소는 prime[n/32]
이고 특정 비트는 n%32
이됩니다. 수가 소수 인 경우비트 배열을 사용하는 에라 토 스테 네스 체
내 testBitIs0(int n)
함수는 1을 반환한다 (만약 그 비트 == 0), 그렇지 않으면 0
setBit(int n)
함수는 단순히 대응하는 위치에 1 비트를 설정
return ((prime[n/32] & (1 << (n%32))) != 0);
int i = n/32;
int pos = n%32;
unsigned int flag = 1;
flag = flag << pos;
prime[i] = prime[i] | flag;
내가 가지고있는 문제는 setBit
에 소수의 배수로 전화 할 때 비트가 올바르게 설정되지 않는다고 생각합니다. 나는 소수의 배수와 setBit
를 호출 할 때 (예 : 4, 6, 8 등의 번호 2)이 줄 실행할 때 : 때 i = 4/6/8/etc
와
if(testBitIs0(i)) { ... }
를 여전히 1을 반환합니다
다른 사람이 내 코드를 점검하여 올바르게 구현할 수 있습니까? 감사.
왜'*하지 *는 0을 확인 testBitIs0'는 무엇입니까? – interjay
완전한 예제를 게시하십시오 ... – Lindydancer
'testBitIs0'는 숫자가 소수 일 때 1을 반환하지만 구현시 true 대신 false와 비교합니다. 'testBitIs0'는'return! (prime [n/32] & (1 << (n % 32)))'만 할 수 있습니다. – Vicky