Đếm số nguyên tố Eisenstein


8

Giới thiệu

Số nguyên Eisenstein là số phức của mẫu

a+bω

Số a,bnguyên ở đâu và

ω = e^(2πi/3)

Các số nguyên Eisenstein tạo thành một mạng tam giác trong mặt phẳng phức:

Số nguyên Eisenstein trong mặt phẳng phức

Chúng tôi nói rằng một số nguyên Eisenstein z=a+bωlà số nguyên tố nếu nó không thể được viết dưới dạng tích của hai số nguyên không (không phải 1, -1,, -ω, ω ^ 2 hoặc -ω ^ 2)

Chương trình

Đầu vào : Một số tự nhiên n.

Output : Số lượng số nguyên tố Eisenstein mà có dạng a+bωa,blà những con số tự nhiên (kể cả không) nhỏ hơn hoặc bằng đển

Các trường hợp thử nghiệm

0 → 0

1 → 0

2 → 5

3 → 9

4 → 13

5 → 20

Chấm điểm

Đây là code-golf, vì vậy, số lượng byte ít nhất sẽ thắng


2
Bạn có thể cung cấp một số trường hợp thử nghiệm?
Alex A.

Tôi không hiểu các trường hợp thử nghiệm. Số lượng a,bcặp 2chỉ là 4vì vậy làm thế nào 5chúng có thể là số nguyên tố?
Maltysen

@Maltysen hãy để tôi viết lại định nghĩa
Meow Mix

1
@ user3502615 Tôi đang nói về phần mà bạn nói "có dạng a + bω trong đó a, b là các số tự nhiên (bao gồm 0) nhỏ hơn n"
Maltysen

@Maltysen Có 5 số: 2ω, 2ω + 1,2ω + 2, ω + 2 và 2
Meow Mix

Câu trả lời:


1

Thạch, 24 byte

Rð_²+×µ€µ³RḊm3,µÆP×1¦3FS

Cách tiếp cận gần giống như câu trả lời Julia của tôi.

                          Initial argument: n
R                           Compute [1, 2, …, n]
 ð_²+×                      (λ, ρ) —→ (λ − ρ)² + λρ (which is λ² − λρ + ρ²)
      µ€                    Zip with itself. Call this Q.

        µ                 Refocus argument: Q
         ³                  The initial argument n
          RḊm3              Compute candidate green line primes: [2, 5, 8, …, n]
              ,             Call this P. Make pair with argument.

               µ          Refocus argument: [P, Q]
                ÆP          Check primality
                  ×1¦3      Multiply the first element by 3
                      FS    Sum everything
                            (The result is 3·countprimes(P) + countprimes(Q))

8

Julia, 66 62 60 byte

!n=sum(isprime,[a<1<b%3?b:a^2-a*b+b^2for a=[0;0;0:n],b=0:n])

Hãy thử trực tuyến!

Giải trình

Chúng tôi quan tâm đến các số nguyên tố trong hình bình hành này trên mặt phẳng phức (ví dụ cho n = 4 ):

nhập mô tả hình ảnh ở đây

Chúng ta có thể chia chúng thành các số nguyên tố trên các đường màu xanh lá cây và trên các đường màu xám .

Wikipedia cho tôi biết một số Eisenstein z là một dòng màu xanh lá cây Eisenstein Prime iff | z | là một số nguyên tố tự nhiên bằng 2 mod 3.

Nó cũng cho biết z là một đường màu xám Eisenstein Prime iff | z | ² = a² - ab + b² là một số nguyên tố tự nhiên.


Vì vậy, chúng tôi lặp qua a = 0 Giảm nb = 0 Khác n và kiểm tra:

  • Nếu (a = 0 hoặc b = 0 hoặc a = b)max (a, b)% 3 = 2 , thì hãy tính xem max (a, b) có phải là số nguyên tố hay không.

  • Khác, tính xem a² - ab + b² có phải là số nguyên tố hay không.

Tuy nhiên, chúng ta có thể lạm dụng tính đối xứng của phân phối. Thay vì đếm từng dòng xanh một lần, chúng ta chỉ có thể đếm một lần ba dòng xanh! Đó là, chỉ kiểm tra a = 0 và tăng bộ đếm lên ba khi chúng ta tìm thấy một số nguyên tố màu xanh lục. Các a=[0;0;0:n]đạt chính xác này.

Vì chúng tôi biết rằng chúng tôi chỉ xem xét đường màu xanh lá cây a = 0 , chúng tôi có thể thay thế max (a, b) bằng b .

Điều kiện đường màu xanh lá cây của người Viking được thể hiện độc đáo ở Julia bằng cách sử dụng chuỗi vận hành: a<1<b%3 .

(Đối với các dòng màu xanh lá cây còn lại, chúng tôi sẽ không bao giờ trả lại dương tính giả: nếu a = b hoặc b = 0 thì a² - ab + b² = a² , không thể là số nguyên tố.)

Ý tưởng

Có lẽ, thay vì viết a^2-a*b+b^2, tôi có thể có điều kiện thay thế số mũ tại bbởi 1khi a<1<b%3- thì biểu thức giảm xuống b. Điều này dường như không ngắn hơn, nhưng nó gọn gàng!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.