천만 이하의 자연수에 대해서만 이야기하고 있다고 가정하십시오.(상대적으로) 숫자에 대한 약수를 빨리 찾으십시오. <10 000 000
LPD (14) == 2, LPD (15) == 3, 그리고 LPD (14) == 3과 같이 10 000 미만의 모든 숫자에 대해 LPD (Lowest Prime Divisor) 목록을 미리 생성하려고합니다. 어떤 소수의 LPD는 그 자체입니다.
나는 모든 소수를 미리 생성했습니다. n 번째 프라임에 액세스하는 것은 간단한 배열 조회입니다. 효율성은 다음과 같습니다. O (1)
주어진 숫자가 소수인지 판별하기위한 미리보기 테이블을 미리 생성했습니다. n 번째 프라임에 액세스하는 것은 간단한 배열 조회입니다. 효율성의 : O (1)
이제, 주어진 숫자의 LPD를 계산하는 나의 순진한 알고리즘은 하나의 프라임이 숫자를 나눌 때까지 모든 소수를 반복하는 것입니다. 그러나 이것은 정말로 오랜 시간이 걸립니다. 모든 숫자에 대해 가장 낮은 약수를 찾는 데 걸리는 시간의 절반 만에 천만 이하의 모든 소수를 생성 할 수 있습니다 (Atkin의 체를 사용합니다. 이해할 수는 없지만 의사 코드에서 구현되었습니다).
최저 우선 소수를 계산할 때 더 좋은 알고리즘이 있습니까?
'sqrt (10 000 000)'보다 작은 소수만을 고려하고 있기를 바랍니다. – Keith
좋은 지적, 나도 그렇게 희망한다. 사람들의 대부분은이 관행을 따르지 않습니다. –
그래, 음, 나는 처음에 IsPrime (n)을 확인한 다음 모든 소수를 검사했다. n이 소수가 아니면 n을 나눌 n보다 작은 소수가 존재합니다. 그 프라임을 찾을 때까지 반복합니다. 항상 sqrt (n)보다 작습니다. – turiyag