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ỏ.

def isPrime[n, k=5]: # miller-rabin
    from random import randint
    if n < 2: return False
    for p in [2,3,5,7,11,13,17,19,23,29]:
        if n % p == 0: return n == p
    s, d = 0, n-1
    while d % 2 == 0:
        s, d = s+1, d/2
    for i in range[k]:
        x = pow[randint[2, n-1], d, n]
        if x == 1 or x == n-1: continue
        for r in range[1, s]:
            x = [x * x] % n
            if x == 1: return False
            if x == n-1: break
        else: return False
    return True

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:

  • Cách kiểm tra các yếu tố cho các số nguyên tố từng người một trong Python và mức độ chậm của nó.
  • Cách sử dụng ProcessPoolExecutor để quản lý một nhóm các quy trình công nhân.ProcessPoolExecutor to manage a pool of worker processes.
  • Cách sử dụng ProcessPoolExecutor để kiểm tra số nguyên tố đồng thời.ProcessPoolExecutor to check for prime numbers concurrently.

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ộng
  • Đọc thêm
  • Takeaways

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 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ộng
  • Đọc thêm
  • Takeaways
  • Một số nguyên tố là một số nguyên dương chỉ chia hết cho chính nó và một.
  • Nếu một số không phải là số nguyên tố, điều đó có nghĩa là có ít nhất một bộ chia khác cho số và chúng ta có thể đề cập đến số về mặt kỹ thuật là có thể là composite composite.

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.

Bắt đầu nào.

Một số là nguyên tố nếu nó là tích cực và chỉ chia hết cho chính nó và một.is_divisible[target,number]:

returntarget%number==0target%number==0

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ố nhỏ hơn 2, không phải là nguyên tố.

foriinrange[2,target]:iinrange[2,target]:

iftarget%i==0:target%i==0:

Nếu số là 2, Prime.

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ố

Nếu không, Prime.

iftarget%2==0:target%2==0:

Nếu số là 2, Prime.

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ố nhỏ hơn 2, không phải là nguyên tố.

foriinrange[3,target,2]:iinrange[3,target,2]:

iftarget%i==0:target%i== 0:

Nếu số là 2, Prime.

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ố

Nếu không, Prime.math.sqrt[target].

Chúng tôi có thể viết một cái gì đó như:

# Kiểm tra xem mục tiêu có chia hết không

foriinrange[3,sqrt[target],2]:iinrange[3,sqrt[target],2]:

iftarget%i==0:target%i ==0:

# không phải là nguyên tố

# nếu không là Prime

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.

.....

# Tính giới hạn trên trên các ước số để kiểm tra

limit=floor[sqrt[target]]=floor[sqrt[target]]

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.

.....

# Tính giới hạn trên trên các ước số để kiểm tra

limit=floor[sqrt[number]]+1=floor[sqrt[number]]+1

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ó.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Kết hợp tất cả những điều này lại với nhau, hàm is_prime [] bên dưới sẽ lấy một số và trả về true nếu nó là số nguyên tố hoặc sai.

Nó không phải là thuật toán nhanh nhất để kiểm tra tính nguyên thủy, nhưng nó sẽ hoạt động.is_prime[number]:

# trả về đúng nếu Prime, sai nếu không# 1 is a special case of not prime

    ifnumberifnumber

Bài Viết Liên Quan

Chủ Đề