Số không chia số ít phổ biến nhất có thể lớn bằng N log C, nhưng nếu số N được phân phối ngẫu nhiên thì số không chia số ít phổ biến nhất có thể nhỏ hơn rất nhiều, có thể ít hơn nhiều so với N. Tôi xây dựng các bảng trong đó Số nguyên tố là ước của số nào.
Đối với mỗi số nguyên tố p, chúng ta có một chỉ số , có nghĩa là tất cả các số cho chỉ số đó đã được kiểm tra tính chia hết cho p và chúng tôi có một danh sách tất cả các số đó chia hết cho.kp
Sau đó, với d = 2, 3, 4, ... chúng tôi cố gắng tìm một số chia hết cho d, hoặc hiển thị là không có. Ta lấy hệ số nguyên tố p lớn nhất của d. Sau đó, chúng tôi kiểm tra tất cả các số chia hết cho p xem chúng có chia hết cho d không. Nếu không tìm thấy, sau đó chúng tôi kiểm tra các số tiếp theo với các chỉ số> để phân chia theo p, cập nhật và danh sách các số chia hết cho p và kiểm tra xem mỗi số có chia hết cho d không.kpkp
Để kiểm tra xem có một số chia hết cho p hay không, chúng tôi kiểm tra các số p trung bình. Sau này nếu chúng ta kiểm tra xem có một số chia hết cho 2p hay không, có 50% cơ hội chúng ta chỉ cần kiểm tra một số (số đó chia hết cho p) và 50% cơ hội để kiểm tra trung bình thêm 2p số. Việc tìm một số chia hết cho 3p có khả năng rất nhanh và cứ thế, và chúng tôi không bao giờ kiểm tra nhiều hơn số N để chia hết cho p, vì chỉ có N số.
Tôi hy vọng việc này sẽ diễn ra với khoảng kiểm tra tính phân chia.N2/logN
Tái bút Kết quả sẽ lớn đến mức nào đối với các số ngẫu nhiên?
Giả sử tôi có N số ngẫu nhiên. Xác suất để một trong số N chia hết cho d là 1 - (1 - 1 / d) ^ N. Tôi giả sử xác suất rằng mỗi số 1 ≤ d ≤ k là một yếu tố của một trong các số ngẫu nhiên được tính bằng cách nhân các xác suất này (Ok, đó là một chút tinh ranh, bởi vì các xác suất này có thể không hoàn toàn độc lập).
Với giả định đó, với N = 1000, có 50% khả năng một trong các số 1..244 không chia bất kỳ số nào và một trong một tỷ mà mỗi số có tới 507 chia cho một trong các số. Với N = 10.000, có 50% khả năng một trong các số 1..1726 không chia bất kỳ số nào và một trong một tỷ mà mỗi số có tới 2979 chia cho một trong các số.
Tôi sẽ đề xuất rằng đối với N đầu vào ngẫu nhiên, kích thước của kết quả lớn hơn một chút so với N / ln N; có thể một cái gì đó như N / ln N * (ln ln N) ^ 2. Đây là lý do tại sao:
Xác suất mà ít nhất một trong số ngẫu nhiên N là chia hết cho một d ngẫu nhiên là . Nếu d ở khoảng N, thì khoảng 1 - exp (-1) 0,6321. Đó là cho một ước số duy nhất; có khả năng mỗi một số số d ≈ N là một ước của ít nhất một trong số N số khá mỏng, do đó, d tối đa sẽ nhỏ hơn đáng kể so với N.1−(1−1/d)N1−(1−1/d)N
Nếu d << N, thì .1−(1−1/d)N≈1−exp(−N/d)
Nếu d ≈ N / ln N rồi .1−exp(−N/d)≈1−exp(−lnN)=1−1/N
Chúng tôi sẽ thêm các xác suất này cho khoảng N / ln N giá trị d, nhưng đối với hầu hết d, kết quả sẽ lớn hơn đáng kể, do đó, d lớn nhất sẽ lớn hơn N / ln N nhưng nhỏ hơn đáng kể so với N.
Tái bút Tìm một số chia hết cho d:
Chúng tôi chọn hệ số nguyên tố p lớn nhất của d, và sau đó trước tiên chúng tôi kiểm tra các số đã được chia hết cho p. Nói d = kp. Sau đó, trung bình chúng tôi chỉ kiểm tra k số chia hết cho p trong khi kiểm tra d cụ thể này và chúng tôi kiểm tra tối đa tất cả các giá trị N để chia hết cho p, cho tất cả d chia hết cho p. Trên thực tế, chúng tôi rất có thể kiểm tra ít hơn N giá trị cho hầu hết các số nguyên tố p, bởi vì sau khi kiểm tra tất cả các giá trị N, thuật toán rất có thể kết thúc. Vì vậy, nếu kết quả là R, thì tôi mong đợi ít hơn N giá trị được chia cho mỗi số nguyên tố nhỏ hơn R. Giả sử R ≤ N, đó là về N ^ 2 / log N kiểm tra.
Tái bút Chạy một số bài kiểm tra
Tôi đã chạy thuật toán này một vài lần với N = 1.000.000 số ngẫu nhiên> 0. Số không chia ít phổ biến nhất là từ 68.000 đến 128.000 với phần lớn các lần chạy trong khoảng từ 100.000 đến 120.000. Số lượng các bộ phận là từ 520 triệu đến 1800 triệu, ít hơn rất nhiều so với (N / ln N) ^ 2; phần lớn các trường hợp được sử dụng từ 1000 đến 1500 triệu đơn vị.