Hướng dẫn how do you check a large number is prime or not in python? - Làm thế nào để bạn kiểm tra một số lớn có phải là số nguyên tố hay không trong python?
Dưới đây là việc tôi thực hiện thử nghiệm nguyên thủy Miller-Rabin; Nó mặc định là 5 thử nghiệm ngẫu nhiên, nhưng bạn có thể điều chỉnh nó như mong muốn. Vòng lặp trên P là một sự trở lại nhanh chóng cho các số nguyên tố nhỏ. Show
Lớp ProcessPoolExecutor trong Python có thể được sử dụng để kiểm tra xem nhiều số có phải là số nguyên tố cùng một lúc không.ProcessPoolExecutor class in Python can be used to check if multiple numbers are prime at the same time. Điều này có thể tăng tốc đáng kể chương trình của bạn so với việc kiểm tra xem các số là số nguyên tố, từng người một. Trong hướng dẫn này, bạn sẽ khám phá cách kiểm tra xem các số có đồng thời sử dụng một nhóm quy trình công nhân không.check if numbers are prime concurrently using a pool of worker processes. Sau khi hoàn thành hướng dẫn này, bạn sẽ biết:
Hãy để lặn trong.
Cách kiểm tra xem các số có phải là một nguyên tố không (chậm)Kiểm tra tính nguyên thủy trong Python Kiểm tra tính nguyên thủy cho một loạt các số Kiểm tra số lượng rất lớn cho tính nguyên thủy Cách kiểm tra xem nhiều số có đồng thời không Phần mở rộngProcessPoolExecutor in Python. Đọc thêm Takeaways Kiểm tra tính nguyên thủy trong PythonKiểm tra tính nguyên thủy cho một loạt các số Kiểm tra số lượng rất lớn cho tính nguyên thủy Cách kiểm tra xem nhiều số có đồng thời không
Số nguyên tố là một lĩnh vực hấp dẫn của toán học, nhưng chúng tôi cũng có thể sử dụng chúng thực tế, chẳng hạn như trong mật mã (ví dụ: khóa công khai và riêng tư), tính toán tổng kiểm tra, định cấu hình bảng băm, trình tạo số ngẫu nhiên và nhiều hơn nữa. Đưa ra một số, chúng ta không thể biết liệu nó có phải là nguyên tố hay không mà không kiểm tra xem liệu nó có bất kỳ ước nào ngoài chính nó và một. Có nhiều thuật toán thông minh để tăng tốc quá trình này, nhưng về cơ bản, các số kiểm tra tính nguyên thủy là một quá trình thủ công và chậm. Do đó, nó tạo ra một trường hợp tốt để khám phá cách làm cho các chương trình đồng thời bằng cách sử dụng ProcessPoolExecutor trong Python. Nó thậm chí còn được sử dụng như một ví dụ nhỏ trong tài liệu API ProcessPoolExecutor.
Trang Wikipedia cho bài kiểm tra nguyên thủy đưa ra một thuật toán ngây thơ mà chúng ta có thể sử dụng để kiểm tra xem một số là số nguyên tố. Các bước có thể được tóm tắt như sau:
Nếu số có ước số giữa 3 và sqrt (n), không phải là nguyên tố
Nếu số có thể được chia cho 2 không còn lại, không phải là nguyên tố. Nếu số có ước số giữa 3 và sqrt (n), không phải là nguyên tốrange() function will take a step size as a third parameter, therefore we can write something like:
Nếu số có ước số giữa 3 và sqrt (n), không phải là nguyên tố Nếu không, Prime.math.sqrt(target). Chúng tôi có thể viết một cái gì đó như:
Càng xa càng tốt. Một vấn đề nhỏ là căn bậc hai có thể không dẫn đến một số nguyên, do đó chúng ta cần làm tròn nó theo một cách nào đó. Chúng ta có thể lấy toán học.floor () của số sẽ chỉ giữ số nguyên và giảm bất kỳ giá trị phân số nào.math.floor() of the number which will just keep the integer and drop any fractional values.
Cuối cùng, chúng tôi thực sự muốn kiểm tra số nguyên là căn bậc hai của mục tiêu, không phải đầu ở một trừ giá trị này, đó là hành vi mặc định của phạm vi (). Do đó, chúng ta có thể thêm một vào giới hạn trên của các ước số để kiểm tra.range(). Therefore, we can add one to this upper limit of divisors to check.
Cuối cùng, chúng tôi thực sự muốn kiểm tra số nguyên là căn bậc hai của mục tiêu, không phải đầu ở một trừ giá trị này, đó là hành vi mặc định của phạm vi (). Do đó, chúng ta có thể thêm một vào giới hạn trên của các ước số để kiểm tra. # Giới hạn các ước số mà chúng tôi kiểm tra, sqrt của n, +1 sO range () sẽ tiếp cận nóis_prime() function below will take a number and return True if it is prime or False otherwise. Và điều đó về nó.
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;& nbsp; & nbsp; & nbsp; & nbsp;# có lẽ là chính Kiểm tra tính nguyên thủy cho một loạt các sốcheck_numbers_are_prime() that takes a list of numbers and tests each in turn, reporting if they are prime, and ignoring them if not. Bây giờ chúng tôi có thể kiểm tra chức năng của chúng tôi trên một số số nguyên tố ứng cử viên. Hãy để xác định một hàm Check_numbers_are_prime () có một danh sách các số và kiểm tra lần lượt, báo cáo nếu chúng là chính và bỏ qua chúng nếu không.
& nbsp; & nbsp; & nbsp; & nbsp; fornumber innumbers: & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tiếp theo, hãy để thử nghiệm nó trên một số số nguyên tố đã biết. Danh sách trang Wikipedia của các số nguyên tố cung cấp nhiều danh sách các số nguyên tố mà chúng ta có thể sử dụng để thử nghiệm. Điều quan trọng, nó có một danh sách tất cả các số nguyên tố trong khoảng từ 1 đến 1.000.check_numbers_are_prime() function with a list of all integers between 1 and 100 from the program entry point.
& nbsp; & nbsp; & nbsp; & nbsp;# xác định một số số để kiểm tra
Chạy ví dụ khóa kéo qua các số từ 1 đến 100 và kiểm tra từng loại nguyên thủy. Số ứng cử viên sau đó được báo cáo. Nếu chúng tôi kiểm tra danh sách này so với danh sách trên trang Wikipedia, chúng tôi có thể xác nhận rằng tất cả các số được báo cáo là nguyên tố và không có số phi chính trị nào được báo cáo. Càng xa càng tốt. Thử nghiệm với các phạm vi số khác nhau, khi nào nó bắt đầu chậm? Hãy cho tôi biết trong các bình luận dưới đây, tôi rất thích nghe những gì bạn khám phá.
Tiếp theo, hãy để xem xét việc kiểm tra một số số rất lớn rất chậm. Kiểm tra số lượng rất lớn cho tính nguyên thủyKiểm tra số lượng nhỏ như số từ 1 đến 100 hoặc thậm chí 1 và 1000 rất nhanh. Kiểm tra tất cả các ước số sử dụng thuật toán ngây thơ của chúng tôi cho các thuật toán lớn là chậm và trở nên tồi tệ hơn khi các con số trở nên lớn hơn. Ví dụ, một số như 489133282872437279 (là Prime, được lấy từ bài viết Wikipedia) có khoảng 350 triệu yếu tố để kiểm tra và có thể mất một phút để chạy trên phần cứng hiện đại. Ouch. Hãy cùng xem xét thử nghiệm một tá ví dụ về số lượng lớn như vậy. Chúng tôi có thể lấy những con số này từ trang Wikipedia liệt kê một số số nguyên tố rất lớn. Chúng ta cũng có thể làm tăng thêm danh sách với các biến thể của các số nguyên tố đã biết không phải là số nguyên tố, ví dụ: Hủy bỏ, thêm, hoặc thay đổi một chữ số. Dưới đây là danh sách 17 số nguyên tố ứng cử viên mà chúng ta có thể kiểm tra, 14 trong số đó thực sự là Prime.
Ví dụ hoàn chỉnh với danh sách các số được cập nhật này để kiểm tra tính nguyên thủy được liệt kê dưới đây.
Chạy các thử nghiệm ví dụ nếu mỗi số là số nguyên tố. Chúng ta có thể thấy rằng 14 số nguyên tố được xác định chính xác. Điều quan trọng, quá trình này tương đối chậm, mất khoảng 7,1 giây trên phần cứng hiện đại. Điều này sẽ ngày càng tồi tệ hơn khi chúng ta thêm nhiều số hoặc số lớn hơn nữa. Ví dụ đã mất bao lâu để chạy trên hệ thống của bạn?
Chúng tôi có thể cập nhật chương trình kiểm tra tính nguyên thủy của mình để sử dụng trực tiếp ProcessPoolExecutor với rất ít thay đổi.ProcessPoolExecutor directly with very little change. Ví dụ: mỗi cuộc gọi đến hàm is_prime () có thể được gửi dưới dạng một nhiệm vụ không đồng bộ cho nhóm quy trình.is_prime() function could be submitted as an asynchronous task to the process pool. Điều này có nghĩa là nhiệm vụ tổng thể không thể hoàn thành nhanh hơn nhiệm vụ chậm nhất, nhưng nó có khả năng nhanh hơn nhiều so với trường hợp nối tiếp ở trên nếu hầu hết các tác vụ nhanh để hoàn thành, ví dụ: Những con số có kích thước khiêm tốn như số chúng tôi đang thử nghiệm. Nếu chúng tôi đang thử nghiệm các con số lớn hơn đáng kể, chúng tôi có thể cần sử dụng một chiến lược thay thế. Ví dụ: thay vì kiểm tra một số dưới dạng tác vụ song song, chúng ta có thể chia các ước số cho mỗi số thành các tác vụ để giảm thời gian kiểm tra từng số. Điều này có thể gây khó khăn trong việc đóng cửa tất cả các nhiệm vụ sau khi tính nguyên thủy được thiết lập. Tuy nhiên, chúng tôi có hai tùy chọn để gửi các cuộc gọi đến is_prime () vào nhóm quy trình: chúng tôi có thể sử dụng SOUST () hoặc MAP ().is_prime() into the process pool: we could use submit() or map(). Sử dụng Substem () sẽ cho phép chúng tôi báo cáo kết quả khi chúng có sẵn bằng cách sử dụng as_completed (), trong khi bản đồ () sẽ yêu cầu chúng tôi báo cáo kết quả theo thứ tự các số được gửi đến nhóm.submit() would allow us to report results as they became available using as_completed(), whereas map() would require us to report results in the order that numbers are submitted to the pool. Hàm is_prime () trả về một giá trị đúng hoặc giả chỉ cho một số. Cả Substem () và Map () đều yêu cầu một cách liên kết kết quả của nhiệm vụ với số đã được gửi.is_prime() function returns a True or False value for a number only. Both submit() and map() require a way to associate the result of the task with the number that was submitted. Trong trường hợp sử dụng Substem (), chúng tôi có thể tạo một ánh xạ các đối tượng trong tương lai đến các số được gửi.submit() we can create a mapping of Future objects to submitted numbers. Trong trường hợp của map (), chúng ta có thể lặp lại danh sách các số theo cùng thứ tự đã được chuyển đến map ().map() we can iterate the list of numbers in the same order that was passed to map(). Ví dụ: chúng ta có thể sử dụng hàm liệt kê tích hợp () trên kết quả từ MAP () để nhận chỉ mục và sử dụng các số tham chiếu được gửi.enumerate() function on the results from map() to get an index and use that to reference numbers that were submitted.
Có lẽ một cách tiếp cận đơn giản hơn là sử dụng hàm zip () tích hợp để lặp lại kết quả từ map () và danh sách các số cùng một lúc, ví dụ::zip() function to iterate the results from map() and the list of numbers at the same time, for example:
Có lẽ một cách tiếp cận đơn giản hơn là sử dụng hàm zip () tích hợp để lặp lại kết quả từ map () và danh sách các số cùng một lúc, ví dụ::
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;map() function feels like a better fit in this case as we are simply applying a function to a list of items, exactly what map() is designed to achieve. Nếu bạn chưa quen với các hàm tích hợp tích hợp () và zip (), xem:check_numbers_are_prime() function to use the ProcessPoolExecutor. Chức năng tích hợp sẵn
Sau đó, chúng ta có thể gửi các tác vụ đến nhóm quy trình bằng bản đồ (), một cuộc gọi đến is_prime () cho mỗi số trong danh sách.map(), one call to is_prime() for each number in the list. Vì có ít hơn 20 nhiệm vụ, chúng tôi không cần phải điều chỉnh đối số của nhóm Chunksize để lập bản đồ () để có được hiệu suất tốt hơn. Điều này có thể được yêu cầu nếu chúng ta có hàng ngàn hoặc hàng triệu mặt hàng trong danh sách.chunksize” argument to map() to get better performance. This might be required if we have thousands or millions of items in the list.
Sau đó, chúng ta có thể lặp lại một zip () của các số và kết quả gọi is_prime () cho mỗi số và báo cáo tính nguyên thủy.zip() of the numbers and results of calling is_prime() for each number and report primality.
Fornumber, isprime inzip (số, kết quả):ProcessPoolExecutor is listed below.
& nbsp; & nbsp; & nbsp; & nbsp;# xác định một số số để kiểm tra & nbsp; & nbsp; & nbsp; & nbsp;# kiểm tra xem mỗi số có phải là số nguyên tố không Chạy ví dụ kiểm tra danh sách các số cho tính nguyên thủy như chúng ta đã làm trước đây. Chúng tôi thấy kết quả tương tự, như mong đợi.
44560482149 là chính 1746860020068409 là chínhBị nhầm lẫn bởi API lớp ProcessPoolExecutor? Tải xuống bảng cheat pdf miễn phí của tôi
Chia sẻ các tiện ích mở rộng của bạn trong các ý kiến dưới đây, thật tuyệt khi xem những gì bạn nghĩ ra. Khóa học Python ProcessPoolExecut miễn phí Tải xuống bảng Cheat API ProcessPoolExecutor của tôi và như một phần thưởng, bạn sẽ nhận được quyền truy cập miễn phí vào khóa học email 7 ngày của tôi. Khám phá cách sử dụng lớp ProcessPoolExecutor bao gồm cách định cấu hình số lượng công nhân và cách thực thi các tác vụ không đồng bộ. Tìm hiểu thêm & NBSP; Đọc thêmPhần này cung cấp các tài nguyên bổ sung mà bạn có thể thấy hữu ích.
TakeawaysTrong hướng dẫn này, bạn đã phát hiện ra cách kiểm tra xem các số có đồng thời sử dụng một nhóm quy trình công nhân không.
Bạn có câu hỏi nào không? Để lại câu hỏi của bạn trong một bình luận bên dưới và tôi sẽ trả lời nhanh với lời khuyên tốt nhất của tôi. Ảnh của Andrew Palmer trên unplash Làm thế nào để bạn kiểm tra xem một số lượng lớn là số nguyên tố trong Python?def is_prime (số):.. # 1 là một trường hợp đặc biệt không phải là nguyên tố.Nếu số # 2 là một trường hợp đặc biệt của một nguyên tố.Nếu số == 2: Trả về đúng .. # Kiểm tra xem số có chia cho 2 không còn lại.Nếu số % 2 == 0: Trả về sai .. Làm thế nào để bạn xác định xem một số lượng lớn là số nguyên tố?Cách dễ nhất để xác định một số nguyên tố là bằng cách tìm các yếu tố của số đã cho.Nếu số có nhiều hơn hai yếu tố, thì đó không phải là số nguyên tố.Tuy nhiên, nếu số đã cho chỉ có hai yếu tố - 1 và chính số, thì đó là số nguyên tố.if the given number has only two factors - 1 and the number itself, then it is a prime number.
Làm thế nào để bạn xác định xem một số là nguyên tố theo cách hiệu quả trong Python?Chương trình Python cho số nguyên tố khởi tạo một vòng lặp bắt đầu từ 2 kết thúc ở giá trị nguyên của sàn của căn bậc hai của số.Kiểm tra xem số có chia hết cho 2. Lặp lại cho đến khi căn bậc hai của số được kiểm tra không.Trong trường hợp, số là chia hết cho bất kỳ số nào, số không ... |