ในบทช่วยสอนนี้ เราจะมาดูวิธีการต่างๆ เพื่อค้นหาจำนวนเฉพาะและเวลาที่จำเป็นสำหรับทุกวิธี เราจะใช้โมดูลเวลาเพื่อคำนวณเวลาดำเนินการ
วิธีที่-1
เป็นวิธีการทั่วไปในการหาจำนวนเฉพาะ
- ถ้าตัวเลขน้อยกว่าหรือเท่ากับหนึ่ง ให้คืนค่าเท็จ
- ถ้าตัวเลขหารด้วยตัวเลขใดๆ ลงตัว ฟังก์ชันจะคืนค่าเป็น False
- หลังจากวนซ้ำ ให้คืนค่า True
ตัวอย่าง
# importing time module
import time
# checking for prime
def is_prime(n):
if n <= 1:
return False
else:
for i in range(2, n):
# checking for factor
if n % i == 0:
# return False
return False
# returning True
return True
# starting time
start_time = time.time()
primes = 0
for i in range(100000):
if is_prime(i):
primes += 1
print(f'Total primes in the range {primes}')
# ending time
end_time = time.time()
print(f'Execution time: {end_time - start_time}') ผลลัพธ์
หากคุณเรียกใช้โปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
Total primes in the range 9594 Execution time: 63.1301212310791
วิธีที่ 2
ในวิธีนี้ เรากำลังลดจำนวนการวนซ้ำโดยตัดให้เป็นสแควร์รูทของ n
มาดูโค้ดกันเลย
ตัวอย่าง
# importing time module
import time
# importing math module for sqrt function
import math
# checking for prime
def is_prime(n):
if n <= 1:
return False
else:
# iterating loop till square root of n
for i in range(2, int(math.sqrt(n)) + 1):
# checking for factor
if n % i == 0:
# return False
return False
# returning True
return True
# starting time
start_time = time.time()
primes = 0
for i in range(100000):
if is_prime(i):
primes += 1
print(f'Total primes in the range {primes}')
# ending time
end_time = time.time()
print(f'Execution time: {end_time - start_time}') ผลลัพธ์
หากคุณเรียกใช้โปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
Total primes in the range 9592 Execution time: 0.2039644718170166
วิธีที่-3
ในวิธีก่อนหน้านี้ เราได้ตรวจสอบเลขคู่แล้ว เราทุกคนรู้ดีว่าจำนวนคู่ไม่สามารถเป็นจำนวนเฉพาะได้ ยกเว้น สอง . ดังนั้น ในวิธีนี้ เราจะลบค่าคู่ทั้งหมดเพื่อลดเวลา
ตัวอย่าง
# importing time module
import time
# importing math module for sqrt function
import math
# checking for prime
def is_prime(n):
# checking for less than 1
if n <= 1:
return False
# checking for 2
elif n == 2:
return True
elif n > 2 and n % 2 == 0:
return False
else:
# iterating loop till square root of n
for i in range(3, int(math.sqrt(n)) + 1, 2):
# checking for factor
if n % i == 0:
# return False
return False
# returning True
return True
# starting time
start_time = time.time()
primes = 0
for i in range(100000):
if is_prime(i):
primes += 1
print(f'Total primes in the range {primes}')
# ending time
end_time = time.time()
print(f'Execution time: {end_time - start_time}') ผลลัพธ์
หากคุณเรียกใช้โปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
Total primes in the range 9592 Execution time: 0.10342741012573242
บทสรุป
หากคุณมีข้อสงสัยเกี่ยวกับบทแนะนำ โปรดระบุในส่วนความคิดเห็น