-4
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đã viết một chương trình đếm tổng số của PRIME UPTILL 1000. Chương trình như sau:
limit = 1000
def is_prime[n]:
for i in range[2, n]:
if n%i == 0:
return False
return True
sum = 0
for i in range[2, int[limit+1]]:
if is_prime[i]:
sum = sum + i
count += 1
print sum
Tôi có thể thực hiện những thay đổi nào để tìm 1000 số nguyên tố thay vì tối đa 1000 số? Ngoài ra, tôi đang tìm kiếm sự phức tạp không gian là O [1] và độ phức tạp về thời gian như O [N] [như tôi biết các phương pháp khác có thể làm điều đó :-] chẳng hạn như "Sây eratosthenes" và tìm kiếm nguyên tố trong khi lặp lại SQRT [n]
Xin hãy sửa cho tôi nếu tôi đi sai một số ở đâu. Cảm ơn bạn.
Hỏi ngày 14 tháng 4 năm 2015 lúc 1:26Apr 14, 2015 at 1:26
Deepdeepdeep
6664 Huy hiệu vàng16 Huy hiệu bạc33 Huy hiệu Đồng4 gold badges16 silver badges33 bronze badges
13
Chỉ là một cải tiến nhỏ dựa trên mã của bạn để tìm các số nguyên tố
limit = 1000
def is_prime[n]:
for i in range[2, n]:
if n%i == 0:
return False
return True
sum = 0
num = 2
for i in xrange[limit]:
while not is_prime[num]:
num += 1
sum += num
num += 1 # sorry, miss this
print sum
2 thay vì các số limit = 1000
def is_prime[n]:
for i in range[2, n]:
if n%i == 0:
return False
return True
sum = 0
num = 2
for i in xrange[limit]:
while not is_prime[num]:
num += 1
sum += num
num += 1 # sorry, miss this
print sum
2.limit = 1000
def is_prime[n]:
for i in range[2, n]:
if n%i == 0:
return False
return True
sum = 0
num = 2
for i in xrange[limit]:
while not is_prime[num]:
num += 1
sum += num
num += 1 # sorry, miss this
print sum
Và bạn cũng có thể sử dụng một vòng lặp duy nhất khi tìm kiếm một số thứ bạn quan tâm nhất định, nó có thể chỉ là vấn đề của hương vị.
limit = 1000
def is_prime[n]:
for i in range[2, n]:
if n%i == 0:
return False
return True
sum = 0
count = 0
num = 2
while count != limit:
if is_prime[num]:
sum += num
count += 1
num += 1
print sum
Đã trả lời ngày 14 tháng 4 năm 2015 lúc 2:17Apr 14, 2015 at 2:17
Zhangwtzhangwtzhangwt
3481 Huy hiệu vàng2 Huy hiệu bạc12 Huy hiệu đồng1 gold badge2 silver badges12 bronze badges
3
Mã số:
def f[]:
i = 2
while True:
if all[i % x != 0 for x in range[2, i-1]]:
yield i
i += 1
primes = f[]
print sum[primes.next[] for _ in range[1000]]
Hoặc một lớp lót:
import itertools
print sum[itertools.islice[itertools.ifilter[lambda x: all[x % i != 0 for i in range[2, x]], f[]], 0, 1000]]
Đã trả lời ngày 14 tháng 4 năm 2015 lúc 1:42Apr 14, 2015 at 1:42
0
Tôi muốn đề xuất thuật toán sau [sàng của Eratosthenes]
n=1000
limit_sieve = 10000
primes = set[]
notPrimes = set[]
i = 2
while len[primes]