Tôi đã cố gắng tạo tất cả các số nguyên tố trong phạm vi X đến Y. Tôi đã thử ví dụ đơn giản trước:
>>> [x for x in range[2, 20]
if all[x % y != 0 for y in range[2, x]]]
[2, 3, 5, 7, 11, 13, 17, 19]
0 có nghĩa là kiểm tra xem 10 có phải là số nguyên tố không: đây là mã của tôi:Here is my code:
prime_list = [x for x in range[10, 11] for y in range[2,x] if x % x == 0 and x % 1 == 0 and x % y != 0]
Tôi biết rằng điều này thiếu tùy chọn để nói với biểu thức rằng
>>> [x for x in range[2, 20]
if all[x % y != 0 for y in range[2, x]]]
[2, 3, 5, 7, 11, 13, 17, 19]
1 nên được kiểm tra tất cả Y trong >>> [x for x in range[2, 20]
if all[x % y != 0 for y in range[2, x]]]
[2, 3, 5, 7, 11, 13, 17, 19]
2 và trả về true nếu và chỉ khi tất cả đã đáp ứng điều kiện này.làm sao chúng ta làm việc đó bây giờ?
Đã hỏi ngày 25 tháng 6 năm 2015 lúc 8:50Jun 25, 2015 at 8:50
Sử dụng
>>> [x for x in range[2, 20]
if all[x % y != 0 for y in range[2, x]]]
[2, 3, 5, 7, 11, 13, 17, 19]
3 để kiểm tra tất cả các yếu tố [từ 2 đến X-1] Điều kiện đáp ứng:>>> [x for x in range[2, 20]
if all[x % y != 0 for y in range[2, x]]]
[2, 3, 5, 7, 11, 13, 17, 19]
Đã trả lời ngày 25 tháng 6 năm 2015 lúc 8:53Jun 25, 2015 at 8:53
Falsetrufalsetrufalsetru
345K58 Huy hiệu vàng688 Huy hiệu bạc610 Huy hiệu Đồng58 gold badges688 silver badges610 bronze badges
3
Một cách sử dụng sự hiểu biết có thể là
list[set[range[2,11]] - {x for x in range[11] for y in range[2,x] if x%y == 0}]
Đã trả lời ngày 25 tháng 6 năm 2015 lúc 9:10Jun 25, 2015 at 9:10
Divdivdiv
5635 Huy hiệu bạc10 Huy hiệu Đồng5 silver badges10 bronze badges
Bạn có thể tối ưu hóa thêm bằng cách sử dụng khái niệm của căn bậc hai để không lặp lại trong danh sách và tính toán số nguyên tố nhanh hơn theo cách sau !!
import math
[x for x in range[2, 21] if all[x % y != 0 for y in range[2, int[math.sqrt[x + 1]] ] ]]
Đã trả lời ngày 25 tháng 5 năm 2021 lúc 22:52May 25, 2021 at 22:52
Chương trình tìm số nguyên tố trong một phạm vi đã cho bằng cách sử dụng danh sách toàn diện:
min = 10
max = 100
primes = [num for num in range[min,max] if 0 not in [num%i for i in range[2,int[num/2]+1]]]
print [primes]
Eric Aya
69.1K35 Huy hiệu vàng176 Huy hiệu bạc247 Huy hiệu đồng35 gold badges176 silver badges247 bronze badges
Đã trả lời ngày 2 tháng 3 năm 2018 lúc 10:40Mar 2, 2018 at 10:40
@câu trả lời của Falsetru là chính xác. Nhưng ngoài ra, cần chú ý đến mã tối ưu hóa. Như ai đó đã nói trong các bình luận trong câu trả lời của Kasra
In [227]: %timeit [x for x in range[4, 1000] if all[x % y != 0 for y in range[2, int[m.sqrt[x]] + 1]]]
100 loops, best of 3: 2.08 ms per loop
In [228]: %timeit [x for x in range[4, 1000] if all[x % y != 0 for y in range[2, int[m.sqrt[x]] + 1]]]
100 loops, best of 3: 2.09 ms per loop
In [229]: %timeit [x for x in range[4, 1000] if all[x % y != 0 for y in range[2, x-1]]]
100 loops, best of 3: 10.4 ms per loop
In [230]: %timeit [x for x in range[4, 1000] if all[x % y != 0 for y in range[2, x-1]]]
100 loops, best of 3: 10.3 ms per loop
Đã trả lời ngày 25 tháng 6 năm 2015 lúc 9:14Jun 25, 2015 at 9:14
bad_keypointsbad_keypointsbad_keypoints
1.3721 Huy hiệu vàng23 Huy hiệu bạc45 Huy hiệu đồng1 gold badge23 silver badges45 bronze badges
1
Phiên bản với bộ lọc:
filter[lambda x:all[x % y != 0 for y in range[2, x]], range[2, 13]]
Đã trả lời ngày 25 tháng 6 năm 2015 lúc 9:10Jun 25, 2015 at 9:10
DivdivNeoWang
5635 Huy hiệu bạc10 Huy hiệu Đồng20 gold badges72 silver badges123 bronze badges
0
Bạn có thể tối ưu hóa thêm bằng cách sử dụng khái niệm của căn bậc hai để không lặp lại trong danh sách và tính toán số nguyên tố nhanh hơn theo cách sau !!
prime = list[filter[lambda x:all[x % y !=0 for y in range[2,x]],range[2,11]]]
print[prime]
Đã trả lời ngày 25 tháng 5 năm 2021 lúc 22:52Aug 29, 2021 at 6:32
Chương trình tìm số nguyên tố trong một phạm vi đã cho bằng cách sử dụng danh sách toàn diện:
>>> lower = int[input["Enter lower range: "]]
>>> upper = int[input["Enter upper range: "]]
>>> [x for x in range[lower, upper+1] if x>1 if all[x % y != 0 for y in range[2, x]]]
Eric Aya
69.1K35 Huy hiệu vàng176 Huy hiệu bạc247 Huy hiệu đồng11 gold badges65 silver badges104 bronze badges
Đã trả lời ngày 2 tháng 3 năm 2018 lúc 10:40Mar 4 at 15:02
1
@câu trả lời của Falsetru là chính xác. Nhưng ngoài ra, cần chú ý đến mã tối ưu hóa. Như ai đó đã nói trong các bình luận trong câu trả lời của Kasra
primes = [num for num in range[2,1000] if True not in [True for divisor in range[2,[int[num/2]+1]] if num % divisor == 0 and num != 2]]
Đã trả lời ngày 25 tháng 6 năm 2015 lúc 9:14Jun 5 at 1:51