Hướng dẫn how do you check if a number is prime in python without loop? - làm thế nào để bạn kiểm tra xem một số có phải là số nguyên tố trong python không mà không có vòng lặp?

Hướng dẫn này sẽ dạy bạn cách viết chương trình Python để kiểm tra xem một số có chính hay không.number is prime or not.

Nếu bạn đã từng thực hiện các bài kiểm tra mã hóa, bạn sẽ bắt gặp câu hỏi toán học trong bài kiểm tra về tính nguyên thủy hoặc để kiểm tra xem một số là số nguyên tố. Và trong vài phút tiếp theo, bạn sẽ học cách đưa ra giải pháp tối ưu cho câu hỏi này.

Trong hướng dẫn này, bạn sẽ:

  • Xem lại những điều cơ bản của các số nguyên tố,
  • Viết mã python để kiểm tra xem một số là số nguyên tố và
  • Tối ưu hóa nó thêm để có được thuật toán thời gian chạy O (√n).

Đối với tất cả điều này và hơn thế nữa, hãy để bắt đầu.

Một số nguyên tố là gì?

Hãy bắt đầu bằng cách xem xét những điều cơ bản của số nguyên tố.

Trong lý thuyết số, một số N tự nhiên được cho là chính nếu nó có chính xác hai yếu tố: 1 và chính số (n). Nhớ lại từ toán học của bạn: Một số tôi được cho là một yếu tố của số N, nếu tôi chia đều n. ✅n said to be prime if it has exactly two factors: 1 and the number itself (n). Recall from your school math: a number i is said to be a factor of the number n, if i divides n evenly. ✅

Bảng sau đây liệt kê một vài con số, tất cả các yếu tố của chúng và nếu chúng là nguyên tố.

N Các nhân tố Là Prime?
1 1 Không
2 1, 2Đúng
3 1, 3Đúng
4 1, 3Không
7 1, 2Đúng
15 1, 3Không

1, 2

  • Đúng
  • 1, 3
  • 1, 2, 4

1, 7

1, 3, 5, 15

Từ bảng trên, chúng ta có thể viết ra như sau:

2 là số nguyên tố nhỏ nhất.

1 là một yếu tố của mỗi số.

Mỗi số n là một yếu tố của chính nó.

Vì vậy, 1 và N là yếu tố tầm thường cho bất kỳ số n. Và một số nguyên tố không nên có bất kỳ yếu tố nào khác ngoài hai yếu tố này.

Điều này có nghĩa là khi bạn đi từ 2 đến N-1, bạn không thể tìm thấy một yếu tố không tầm thường phân chia N mà không có phần còn lại.

  • Thuật toán O (N) để kiểm tra xem một số có chính trong Python khôngn evenly without a remainder, you can immediately conclude that the number is not prime.
  • Trong phần này, chúng ta hãy chính thức hóa cách tiếp cận trên thành hàm Python.2 all the way up to n – 1 without finding a number that divides n evenly, then the number is prime.

Bạn có thể lặp qua tất cả các số từ 2 đến N - 1 bằng cách sử dụng đối tượng range() trong Python.

Trong Python,

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
0 trả về một đối tượng phạm vi. Sau đó, bạn có thể lặp lại đối tượng phạm vi để có được một chuỗi từ
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
1 cho đến
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
2 trong các bước của
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
3.

def is_prime(n):
  for i in range(2,n):
    if (n%i) == 0:
      return False
  return True

Vì chúng ta cần tập hợp các số nguyên từ 2 đến N-1, chúng ta có thể chỉ định

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
4 và sử dụng nó kết hợp với vòng lặp
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
5.

  • Ở đây, những gì chúng tôi muốn làm:n as the argument.
  • Nếu bạn tìm thấy một số phân chia n đều mà không có phần còn lại, bạn có thể kết luận ngay rằng số không phải là số nguyên tố.
  • Nếu bạn đã lặp qua toàn bộ phạm vi số từ 2 tất cả các cách lên đến N - 1 mà không tìm thấy một số chia đều n, thì số là số nguyên tố.

Chức năng Python để kiểm tra số nguyên tố

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True

Sử dụng ở trên, chúng ta có thể tiếp tục và xác định hàm

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
6 như sau.

Bây giờ, hãy để phân tích định nghĩa hàm trên.

Hàm trên

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
6 có số nguyên dương N làm đối số.

Nếu bạn tìm thấy một yếu tố trong phạm vi được chỉ định là (2, N-1), hàm sẽ trả về ________ 18, vì số không phải là số nguyên tố. Các nhân tố
6 Là Prime?3, 6
10 Không5, 10
18 1, 29, 18

Đúngn that is greater than n/2 is n itself.

1, 3

1, 2, 4

1, 7

1, 3, 5, 15

Từ bảng trên, chúng ta có thể viết ra như sau:

is_prime(9)
# False

is_prime(11)
# True

2 là số nguyên tố nhỏ nhất.O(n) runtime complexity: proportional to the value of n or linear in n.

1 là một yếu tố của mỗi số.

Mỗi số n là một yếu tố của chính nó.

Vì vậy, 1 và N là yếu tố tầm thường cho bất kỳ số n. Và một số nguyên tố không nên có bất kỳ yếu tố nào khác ngoài hai yếu tố này.

Điều này có nghĩa là khi bạn đi từ 2 đến N-1, bạn không thể tìm thấy một yếu tố không tầm thường phân chia N mà không có phần còn lại.

Thuật toán O (N) để kiểm tra xem một số có chính trong Python khônga is a factor of the number n, then there also exists a factor b such that a x b = n, or simply, ab = n.

Trong phần này, chúng ta hãy chính thức hóa cách tiếp cận trên thành hàm Python.

Bạn có thể lặp qua tất cả các số từ 2 đến N - 1 bằng cách sử dụng đối tượng range() trong Python.

Trong Python,

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
0 trả về một đối tượng phạm vi. Sau đó, bạn có thể lặp lại đối tượng phạm vi để có được một chuỗi từ
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
1 cho đến
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
2 trong các bước của
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
3.

Vì chúng ta cần tập hợp các số nguyên từ 2 đến N-1, chúng ta có thể chỉ định

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
4 và sử dụng nó kết hợp với vòng lặp
is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
5.(a, b), you can see that if a is less than 4.24, then b is greater than 4.24—in this example, (2, 18) and (3, 6).

một b
1 18
2 9
3 6
Các yếu tố 18 theo cặp

Hình dưới đây cho thấy các yếu tố của 18 được vẽ trên dòng số.

Hướng dẫn how do you check if a number is prime in python without loop? - làm thế nào để bạn kiểm tra xem một số có phải là số nguyên tố trong python không mà không có vòng lặp?

Nếu số N xảy ra là một hình vuông hoàn hảo, bạn sẽ có a = b = √n là một trong những yếu tố.

▶️ Look at the factors of 36 in the table below. As 36 is a perfect square, a = b = 6 is one of the factors. For all other factor pairs (a, b), a < 6 and b > 6 holds.

một b
1 36
2 18
3 12
4 9
6 6
Các yếu tố 18 theo cặp

Hình dưới đây cho thấy các yếu tố của 18 được vẽ trên dòng số.

  • Nếu số N xảy ra là một hình vuông hoàn hảo, bạn sẽ có a = b = √n là một trong những yếu tố.n can be written as n = a x b
  • If n is a perfect square, then a = b = √n.
  • Các yếu tố của 36 theo cặpa < b, then, a < √n and b > √n.
  • Tóm lại, chúng tôi có những điều sau đây:a > b, then a > √n and b < √n.

Mỗi số n có thể được viết là n = a x b

Nếu n là một hình vuông hoàn hảo, thì a = b = √n.

Let’s proceed to optimize the function to check for prime numbers in Python.


import math
def is_prime(n):
  for i in range(2,int(math.sqrt(n))+1):
    if (n%i) == 0:
      return False
  return True

Khác, nếu a> b, thì a> √n và b <√n.

  • Vì vậy, thay vì lặp qua tất cả các số nguyên lên đến n/2, bạn có thể chọn chạy lên đến √n. Và điều này hiệu quả hơn rất nhiều so với cách tiếp cận trước đây của chúng tôi.
  • Cách sửa đổi thuật toán is_prime () thành o (√n)n may not be a perfect square, we’ll have to cast it into an integer. Use
    def is_prime(n):
      for i in range(2,int(n/2)):
        if (n%i) == 0:
          return False
      return True
    4 to cast
    def is_prime(n):
      for i in range(2,int(n/2)):
        if (n%i) == 0:
          return False
      return True
    5 into an
    def is_prime(n):
      for i in range(2,int(n/2)):
        if (n%i) == 0:
          return False
      return True
    6.
  • Hãy để tiến hành tối ưu hóa chức năng để kiểm tra các số nguyên tố trong Python.

Bây giờ, hãy để phân tích định nghĩa hàm trên:

is_prime(8)
# False

is_prime(15)
# False

is_prime(23)
# True

Để tính toán căn bậc hai của một số, hãy để mô-đun toán học tích hợp của Python, và sử dụng hàm

def is_prime(n):
  for i in range(2,int(n/2)):
    if (n%i) == 0:
      return False
  return True
3.

Vì n có thể không phải là một hình vuông hoàn hảo, chúng tôi sẽ phải ném nó vào một số nguyên. Sử dụng def is_prime(n): for i in range(2,int(n/2)): if (n%i) == 0: return False return True4 để đúc def is_prime(n): for i in range(2,int(n/2)): if (n%i) == 0: return False return True5 vào def is_prime(n): for i in range(2,int(n/2)): if (n%i) == 0: return False return True6.

Để đảm bảo rằng chúng tôi thực sự kiểm tra tối đa √n, chúng tôi thêm một cộng với chức năng range() không bao gồm điểm cuối của phạm vi theo mặc định.

import numpy as np
import seaborn as sns
import pandas as pd


n = 20

x = np.arange(n)
y1 = np.sqrt(x)
y2 = x
df = pd.DataFrame({"O(√n)":y1,"O(n)":y2})
sns.set_theme()
sns.lineplot(data = df)

Ô mã bên dưới xác minh rằng chức năng của chúng tôi

is_prime(2)
# True

is_prime(8)
# False

is_prime(9)
# False

is_prime(11)
# True
6 hoạt động chính xác.

  • Trong phần tiếp theo, chúng ta hãy tạo một vài lô đơn giản để hiểu trực quan O (N) và O (√n).
  • So sánh trực quan O (N) và O (√n)
  • ▶ Chạy đoạn mã sau trong môi trường Notebook Jupyter mà bạn chọn.

Đoạn trích trên cho thấy cách bạn có thể vẽ đường cong cho n và √n cho một loạt các giá trị.

Hướng dẫn how do you check if a number is prime in python without loop? - làm thế nào để bạn kiểm tra xem một số có phải là số nguyên tố trong python không mà không có vòng lặp?

Chúng tôi sử dụng hàm arange () numpy để tạo một mảng số.

Và sau đó, chúng tôi thu thập các giá trị của N và √n lên đến, nhưng không bao gồm 20, vào khung dữ liệu gấu trúc.
Hướng dẫn how do you check if a number is prime in python without loop? - làm thế nào để bạn kiểm tra xem một số có phải là số nguyên tố trong python không mà không có vòng lặp?

From the above plot, you can infer that O(√n) algorithm is significantly faster when you’re testing if a large number is prime.

Tiếp theo, chúng tôi âm mưu sử dụng chức năng lineplot () của Seaborn.

Từ cốt truyện dưới đây, chúng ta thấy rằng √n nhỏ hơn đáng kể so với n.

Bây giờ chúng ta hãy tăng phạm vi lên tới 2000 và lặp lại các bước tương tự như trên.

import numpy as np
import seaborn as sns
import pandas as pd


n = 2000

x = np.arange(n)
y1 = np.sqrt(x)
y2 = x
df = pd.DataFrame({"O(√n)":y1,"O(n)":y2})
sns.set_theme()
sns.lineplot(data = df)
Từ biểu đồ trên, bạn có thể suy ra rằng thuật toán O (√n) nhanh hơn đáng kể khi bạn kiểm tra nếu một số lượng lớn là số nguyên tố.

  • Ở đây, một ví dụ nhanh: 2377 là một số nguyên tố, xác định điều này! 😀
  • Trong khi phương pháp O (n) sẽ thực hiện thứ tự 2000 bước, thuật toán O (√n) có thể giúp đi đến câu trả lời chỉ trong 49 bước.✅
  • Sự kết luận
  • Và đó là thời gian cho một bản tóm tắt nhanh chóng.

Để kiểm tra xem một số là số nguyên tố, cách tiếp cận ngây thơ là lặp qua tất cả các số trong phạm vi (2, n-1). Nếu bạn không tìm thấy một yếu tố phân chia N, thì N là số nguyên tố.

Vì yếu tố duy nhất của N lớn hơn N/2 là chính N, bạn có thể chọn chỉ chạy lên đến N/2.

Làm thế nào để bạn biết nếu một số là số nguyên tố không có vòng lặp?

Về cơ bản, có hai cách để kiểm tra xem một số là số nguyên tố: đầu tiên là thử và chia nó cho các số nguyên tố thấp hơn, và cách khác là kiểm tra nó theo danh sách các số nguyên tố được xác định trước.try and divide it by the lower primes, and the other is to check it against a pre-determined list of primes.

Là chức năng chính trong Python?

Hàm python để kiểm tra số nguyên tố trên hàm trên is_prime () có số nguyên dương n làm đối số.Nếu bạn tìm thấy một yếu tố trong phạm vi được chỉ định là (2, n-1), hàm trả về sai số không phải là số nguyên tố.Và nó trả về đúng nếu bạn đi qua toàn bộ vòng lặp mà không tìm thấy một yếu tố.is_prime() takes in a positive integer n as the argument. If you find a factor in the specified range of (2, n-1), the function returns False —as the number is not prime. And it returns True if you traverse the entire loop without finding a factor.