내 코드는 다음과 같습니다. 나는 이것이 속도와 기억면에서 다른 알고리즘과 어떻게 비교되는지를 우선적으로 알고 싶다.숫자가 소수인지 확인하는 데 사용되는 알고리즘의 장단점은 무엇입니까?
0
A
답변
6
우선, 귀하의 알고리즘은 선형 시간 O (n)을 취합니다. 최대 sqrt(n)
(i * i <= n
)까지의 숫자 만 확인하면 속도를 대폭 향상시킬 수 있습니다. 그 말은, 만약 당신이 소수 ~ 크기의 k 개의 번호를 확인하고 싶다면 O(k sqrt (n))
으로 끝날 것입니다. 여전히 나쁘다. 이 경우
n
까지 번호를
O(n log log n)
에서 구현 될 수있다 체 (
Atkins 또는
Eratosthenes)를 구축한다. 이 방법으로 모든 후속 테스트를 O (1)에서 수행 할 수 있습니다.
2
짝수 후보 (2 제외) 중 어느 것도 소수이기 때문에 홀수와 2를 스테핑해야합니다. 다른 이유로 루프는 i <= input/3
에서 종료해야합니다. 나는 당신의 실행 속도를 여섯 배로 늘 렸습니다.
bool isPrime(int input){
int endval = input/3;
if (input <= 2)
return true;
if ((input & 1) == 0)
return false;
for(int i = 3; i <= endval; i+=2)
if(input%i == 0)
return false;
return true;
}
+0
당신의 속도를 약간 높일 수 있습니다 :'(input <4)가 true를 반환한다면 :'으로 만드십시오. 별로는 아니지만 ... – Deduplicator
0
다음과 같은 방법으로 시도해 볼 수 있습니다 (모든 가능한 경우를 선택했는지 확신 할 수 없음). 잠재적 인 오버플로 문제를 피하려면 (i * i) < = input 대신 i < = (input/i)이 사용됩니다.
bool isPrime(int input){
int i;
if(input%2 == 0)
return false;
for(i = 3; i <= (input/i); i += 2)
if(input%i == 0)
return false;
return true;
}
관련 문제
- 1. 숫자가 소수인지 확인하는 방법?
- 2. c 숫자가 소수인지 확인하는 프로그램
- 3. 파이썬 : 숫자가 소수인지 판단하기
- 4. 숫자가 소수인지 찾기위한 프로그램 #
- 5. 숫자가 소수인지 알아보기 프로그래밍
- 6. python 3. 숫자가 소수인지 확인하는 논리적 오류
- 7. C++에서 숫자가 소수인지 확인하는 방법
- 8. 숫자가 소수인지 확인하십시오.
- 9. 숫자가 소수인지 재귀 적으로 확인하십시오.
- 10. C++ 숫자가 소수인지 감지합니다.
- 11. 숫자가 파이썬으로 소수인지 알아보기
- 12. 숫자가 소수인지 여부 확인
- 13. 숫자가 소수인지 여부 확인
- 14. 숫자가 소수인지 검사하는 프로그램
- 15. 프롤로그 프로그램이 숫자가 소수인지 확인하려면
- 16. 숫자가 소수인지 판단하는 방법 JS
- 17. 숫자가 체 없이는 소수인지 확인하십시오.
- 18. 주어진 입력 숫자가 소수인지 아닌지 확인하는 matlab 프로그램
- 19. 확인 임의의 숫자가 소수인지 아닌지 숫자가 확인 PowerShell을
- 20. 파이썬에서 숫자가 10 억 미만으로 소수인지 알아보기
- 21. 숫자가 소수인지 복합인지를 결정하는 프로그램을 수행하는 방법
- 22. 숫자가 연속 소수인지 어떻게 확인할 수 있습니까?
- 23. SonarQube 코드를 확인하는 데 사용되는 Java 버전
- 24. 숫자가 0인지 확인하는 방법은 무엇입니까?
- 25. git submodule과 Repo의 장단점은 무엇입니까?
- 26. Django에서 코드 적용 범위를 확인하는 데 사용되는 것은 무엇입니까?
- 27. DbDataRecord에서 열의 존재 여부를 확인하는 데 사용되는 방법은 무엇입니까?
- 28. 메소드에 테스트 사례가 있는지 여부를 확인하는 데 사용되는 도구는 무엇입니까?
- 29. 로 인코딩 할 때 숫자가 소수인지 확인 이진/단항
- 30. C Libgcrypt : libgcrypt를 사용하여 숫자가 소수인지 확인할 수 없습니다.
이 질문은 코드 검토에 관한 내용이므로 오프 토픽 인 것으로 보입니다. – BartoszKP
아니요, 코드 검토가 아닙니다. 그것은 코딩 관행이 아닌 알고리즘에 대해 묻고 있습니다. –