2012-08-05 9 views
6

Chức năng đơn giản nhất tạo danh sách số nguyên tố lên đến đối số là gì? Không khó để đưa ra một chức năng như vậy, ví dụ:Mathematica - tạo danh sách các số nguyên tố lên đến giới hạn

foo[n_] := Block[{A = {}, p = 2}, 
      While[p < n, A = Append[A, p]; p = NextPrime[p]]; 
      A] 

Tuy nhiên, điều này có vẻ quá lộn xộn. Tôi muốn làm một cái gì đó như

foo[n_] := Table[Prime[i], {i,2,???}] 

Ở đâu ??? là chỉ số của NextPrime[n,-1]. Điều này có thể không?

+0

Bạn có thể quan tâm để biết rằng có một [trang web StackExchange Mathematica cụ thể] (http://mathematica.stackexchange.com/). Khi lập trình trong Mathematica, bạn nên kiểm tra tất cả các công dụng của 'While', [' For'] (http://mathematica.stackexchange.com/q/2158/8), 'Do' và' Append'. Chúng là hangovers từ các ngôn ngữ khác và (như các câu trả lời dưới đây cho thấy), có [cách tiếp cận thường ngắn gọn hơn trong Mathematica] (http://mathematica.stackexchange.com/q/7924/8). – Verbeia

Trả lời

6

Ví dụ

f[x_] := Prime[[email protected]@x] 

Cách sử dụng

Grid[Table[{x, f[x]}, {x, 13, 20}], Frame -> All] 

Mathematica graphics

+0

Cảm ơn. Phần tôi đã mất tích (tôi gọi nó là ???, về cơ bản nghịch đảo của 'Prime'), là' PrimePi' – user1339898

0

Một trong các thuật toán phổ biến cho điều này là Sieve of Eratosthenes. Nó là một thuật toán đơn giản và dễ thực hiện hợp lý trong bất kỳ ngôn ngữ nào.

+3

OP không yêu cầu thuật toán, nhưng đối với một hàm cụ thể trong một ngôn ngữ cụ thể. Hơn nữa, ngôn ngữ trong câu hỏi có các nguyên thủy cần thiết đã có sẵn. Vui lòng xem các thẻ trước khi trả lời. –

2

hình thức ưa thích của tôi:

p = Prime ~Array~ [email protected]# &; 

p @ 20 

{2, 3, 5, 7, 11, 13, 17, 19}