모든 소수는 6k + 1 또는 6k-1 형태입니다. 숫자가 소수인지 아닌지를 확인하기 위해 아래의 알고리즘을 사용할 수 있습니다. 이 알고리즘을 기반으로 작성된 프로그램을 보았습니다.소수 검사
public boolean isPrime(int n)
{
if (n <= 1) return false;
if (n <= 3) return true;
if (n%2 == 0 || n%3 == 0) return false;
for (int i=5; i*i<=n; i=i+6)
if (n%i == 0 || n%(i+2) == 0)
return false;
return true;
}
하지만 우리는 다음과 같은 방식으로 코드를 작성했다면 문제했을 이해하지 않습니다 : (1)에 비해 우리는 O의 시간 복잡도를 줄일 수 있습니다 이것에 의하여
public boolean isPrime(int number){
boolean primeFlag = false;
if(number == 0 || number ==1){
return primeFlag;
}
if(number == 2 || number == 3){
primeFlag = true;
}
if((number+1)%6 == 0){
primeFlag = true;
}
if((number-1)%6 == 0){
primeFlag = true;
}
return primeFlag;
}
~ O (루트 (n)). 잘못된 방향으로 향하고 있는지 알려주세요.
2 번과 3 번은 명시된 규칙의 예외입니다. 둘 다 명시된 형식이 아닙니다 .. 사실상 2,3 휠 요소 분해를보고 있습니다. 일부 인터넷 조사가 도움이 될 것입니다. – rossum