Có phải là một thủ tướng Chen?


27

Một số là số nguyên tố Chen nếu nó thỏa mãn hai điều kiện:

  • Nó là chính nó
  • Chính nó cộng với hai là một số nguyên tố hoặc một bán nguyên tố.

Một số nguyên tố là một số trong đó nó có chính xác hai ước và các ước đó bao gồm chính nó và một.

Một số nguyên tố là một số là tích của hai số nguyên tố. (Lưu ý rằng 12 = 2 * 2 * 3 không phải là bán nguyên tố, nhưng 25 = 5 * 5 là).

Nhiệm vụ của bạn là xác định xem một số có phải là số nguyên tố Chen hay không. Bạn nên xuất bất kỳ giá trị trung thực nào cho có và bất kỳ giá trị giả nào cho không.

Đầu vào sẽ là bất kỳ số nguyên nào lớn hơn hoặc bằng một. Nó cũng có thể được lấy dưới dạng một chuỗi, mảng ký tự hoặc một mảng hoặc chữ số.

Ví dụ:

101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy

Đây là OEIS A109611 .

Điều này, một phần, được lấy cảm hứng từ Am I a Sophie Germain Prime? Thật không may, đã bị đóng như một bản sao, vì vậy tôi đang đăng một thử thách có liên quan không phải là một bản sao.


Chúng ta có thể trở lại Truecho sự thật và 2hoặc Falsecho sự giả dối (giá trị giả mạo không nhất quán)?
Ông Xcoder

@ Mr.Xcoder Không bao giờ nói bạn không thể
Okx

Đối với một bán nguyên tố, "chính xác hai yếu tố chính" có tính bội số không? Là 2 * 2 * 2 * 3 * 3một bán nguyên tố? Thế còn 5 * 5?
Không phải là một cái cây

@Notatree 5*5là bán chính, 2*2*2*3*3không. Tôi nói chính xác hai.
Okx

Vì vậy, nó không tính bội số, sau đó? (Bạn có thể tranh luận rằng 2*2*2*3*3có chính xác hai thừa số nguyên tố, cụ thể là 23, và 5*5có một yếu tố quan trọng, cụ thể là 5.) Có lẽ bạn có thể chỉnh sửa đó vào câu hỏi?
Không phải là một cái cây

Câu trả lời:



11

05AB1E , 8 byte

p¹ÌÒg3‹*

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

Giải trình

p¹ÌÒg3‹*   Argument n
p          Push isPrime(n)
 ¹ÌÒ       Push list of prime factors of (n+2)
    g3‹    Length of list is lower than 3
       *   Multiplication of boolean values, 0 if either is 0 (false)

6

ArnoldC , 1339 byte

LISTEN TO ME VERY CAREFULLY q
I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE p
GIVE THESE PEOPLE AIR
HEY CHRISTMAS TREE c
YOU SET US UP 0
HEY CHRISTMAS TREE d
YOU SET US UP 0
HEY CHRISTMAS TREE l
YOU SET US UP p
STICK AROUND l
GET TO THE CHOPPER d
HERE IS MY INVITATION p
I LET HIM GO l
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE d
BULLSHIT
GET TO THE CHOPPER c
HERE IS MY INVITATION c
GET UP 1
ENOUGH TALK
YOU HAVE NO RESPECT FOR LOGIC
GET TO THE CHOPPER l
HERE IS MY INVITATION l
GET DOWN 1
ENOUGH TALK
CHILL
I'LL BE BACK c
HASTA LA VISTA, BABY
IT'S SHOWTIME
HEY CHRISTMAS TREE p
YOU SET US UP 0
GET YOUR ASS TO MARS p
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
HEY CHRISTMAS TREE n
YOU SET US UP 0
GET YOUR ASS TO MARS n
DO IT NOW q p
HEY CHRISTMAS TREE g
YOU SET US UP 42
GET TO THE CHOPPER g
HERE IS MY INVITATION n
YOU ARE NOT YOU YOU ARE ME 2
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE g
GET TO THE CHOPPER p
HERE IS MY INVITATION p
GET UP 2
ENOUGH TALK
GET YOUR ASS TO MARS n
DO IT NOW q p
GET TO THE CHOPPER g
HERE IS MY INVITATION 5
LET OFF SOME STEAM BENNET n
ENOUGH TALK
BECAUSE I'M GOING TO SAY PLEASE g
TALK TO THE HAND "t"
BULLSHIT
TALK TO THE HAND "f"
YOU HAVE NO RESPECT FOR LOGIC
BULLSHIT
TALK TO THE HAND "f"
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE BEEN TERMINATED

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

.



5

Bình thường, 10 byte

&P_Q>3lP+2

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

Làm sao?

&P_Q>3lP+2  # input: Q
        +2  # Q + 2
       P    # prime factors
    >3l     # length lower than 3?
 P_Q        # Q is prime?
&           # and both results

>. <Outgolfed>. <
Ông Xcoder

@ Mr.Xcoder thực sự, tôi đã đăng bài của tôi 5 phút trước
Uriel

Vâng, đã không thấy nó vì kết nối internet kém
Ông Xcoder

3

Python với sympy ,  69  56 byte

-13 byte nhờ alephalpha (bằng cách nâng cấp lên sympy 1.1 và sử dụng primeomega(n+2)để thay thế sum(factorint(n+2).values()))

... tiếp quản từ đệ trình đã bị xóa của Gryphon.

from sympy import*
lambda n:primeomega(n+2)<3*isprime(n)

Một chức năng không tên được trả về Truecho số nguyên tố Chen và mặt Falsekhác.

Đếm các yếu tố n+2bằng cách tính tổng bội của nhân tố chính.

Lưu ý rằng 3được nhân với isprime(n)trước khi <so sánh được thực hiện, do đó, đối với ncác phép thử không phải là số nguyên tố nếu n+2có ít hơn 0các yếu tố (luôn luôn cho năng suất False), trong khi đối với số nguyên tố, nnó sẽ kiểm tra xem n+2là số nguyên tố hay bán nguyên tố.


@Gryphon - Tôi đã tiếp quản, nó có thể bị đánh bại mà không cần nhập bất kỳ.
Jonathan Allan

Tôi đã hết hồn! Các 3*isprime(n)Bí quyết là những gì tôi đang tìm kiếm trong việc làm sạch lên tuyên bố có điều kiện.
Đuổi theo Vogeli

À, @icosahedron, tôi đã không nhận thấy bạn, xin lỗi - điều này rất giống tôi sẽ chỉ nhận xét để giúp bạn cải thiện bạn. Hãy coi câu trả lời này là như vậy, chỉ cần cho tôi biết và tôi sẽ xóa câu trả lời này.
Jonathan Allan

Tôi nghĩ sympy có chức năng Primeomega .
alephalpha

@alephalpha Cảm ơn, chỉ cần nâng cấp lên 1.1 để xem, sẽ tiết kiệm được byte!
Jonathan Allan


3

Java 8, 85 84 83 byte

n->{int a=n+2,b=0,c=0,i=1;for(;i++<n;b+=n%i<1?1:0)c+=a%i<1?1:0;return n>1&b<2&c<3;}

-1 byte nhờ @ OlivierGrégoire bằng cách sử dụng phương pháp lặp thay vì đệ quy.

Giải trình:

Hãy thử nó ở đây.

n->{            // Method with integer parameter and boolean return-type
  int a=n+2,    //  Start `a` at the input + 2
      b=0,c=0,  //  Start `b` and `c` at 0
      i=1;      //  Start `i` at 1
  for(;i++<n;   //  Loop from 1 to `n` (and raise `i` immediately by 1)
    b+=n%i<1?   //   If the input is divisible by `i`
        1       //    Raise `b` by 1
       :        //   Else:
        0)      //    Leave `b` as is
    c+=a%i<1?   //   If the input + 2 is divisible by `i`:
        1       //    Raise `c` by 1
       :        //   Else:
        0;      //    Leave `c` as is
                //  End of loop (implicit / single-line body)
  return n>1    //  Return if the input is larger than 1
         &b<2   //   And `b` is now smaller than 2
         &c<3;  //   And `c` is now smaller than 3
}               // End of method

Phiên bản lặp chỉ là một byte ngắn hơn : n->{int N=n+2,f=0,F=0,d=1;for(;d++<n;f+=n%d<1?1:0)F+=N%d<1?1:0;return n>1&f<2&F<3;}.
Olivier Grégoire


2

JavaScript (ES6), 63 61 byte

g=(e,i=e)=>i--<3?1:e%i?g(e,i):g(i)+1
f=e=>e>1&g(e)<2&g(e+2)<3
Test cases:<br><textarea id=i rows=6 oninput="go()">101&#10;223&#10;233&#10;1</textarea><br><pre id=q></pre><script>window.onload=function go(){document.getElementById('q').innerHTML=document.getElementById('i').value.split('\n').map(e=>e+' -> '+f(+e)).join('\n')}</script>

Xác định hàm flấy nlàm đối số và trả về kết quả. Tôi rất hạnh phúc với cách gbật ra; nó đếm số lượng các thừa số nguyên tố trong một số.

2 byte tiết kiệm nhờ &thủ thuật của Kevin Cruijssen .

Bị đánh cắp

Ω = (n,          // Ω(n) = number of n's prime factors, n > 1.
    i = n) =>    // Start iterating from i = n - 1. Since we'll immediately
                 // decrement i, n is used here.
    --i          // Immediately decrement i.

    < 2          // If i = 0 or i = 1, n is a prime at this point.
    ? 1 :        // Therefore Ω(n) = 1.

    n % i != 0 ? // If n is not divisible by i,
    Ω(n, i)      // try again with i := i - 1 (immediately decremented, so use i).

    : Ω(i) + 1   // n is divisible by i. Since we're counting down from n - 1
                 // and i is the first such number, i is n's largest non-trivial
                 // divisor, and thus n/i is a prime.
                 // Therefore Ω(n) = Ω(i) + Ω(n/i) = Ω(i) + 1.

is_chen = n =>     // An integer n ≥ 1 is a Chen prime if and only if:
    n > 1          // n > 1,
    & Ω(n) < 2     // Ω(n) = 1 < 2, i.e. n is a prime, and
    & Ω(n + 2) < 3 // Ω(n + 2) < 3, i.e. n + 2 is a prime or a semiprime.

Bạn có thể thay đổi cả hai &&thành &? Vì 0/1 có phải là giá trị trung thực / falsey trong JS không?
Kevin Cruijssen

@KevinCruijssen Điều đó có vẻ hiệu quả. Quá tệ |&không ngắn mạch, điều đó có thể tiết kiệm nhiều byte hơn nữa g.
PurkkaKoodari

2

Japt , 22 20 19 13 12 byte

U°j ©2¨°Uk l
  • 6 byte được lưu nhờ đề xuất của obarakon về một phương pháp khác.

Kiểm tra nó


2

PHP, 64 byte

for($i=$n=$argn+2;--$i;$argn%$i?:$q++)$n%$i?:++$p;echo$p<4^--$q;

in 0 cho sự thật, số nguyên khác cho giả. Chạy như ống với -nRhoặc thử trực tuyến .

phá vỡ

for($i=$n=$argn+2;--$i; # loop $i from N+1 to 1
    $argn%$i?:$q++)         # if $i divides N, increment $q
    $n%$i?:++$p;            # if $i divides N+2, increment $p
echo$p<4                # $p is 1 for a prime, 3 for a semiprime
    ^--$q;              # $q is 2 for prime; so this is 1^1 (==0) for a Chen Prime

giá trị sai lệch nhất quán, 65 byte:

for($i=$n=2+$k=$argn;--$i;$k%$i?:$q++)$n%$i?:++$p;echo$p<4&$q==2;

in 1cho sự thật và giả 0.


1

Python 3 với SymPy, 73 71 byte

lambda n:(sum(factorint(n+2).values())<3)&isprime(n)
from sympy import*

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


Đây là một phiên bản được đánh gôn nhiều hơn của một câu trả lời được đăng ở đây trước đó, nhưng dường như nó đã bị xóa.


Cảm ơn @JonathanAllan vì đã tiết kiệm 2 byte!


1
... Cũng lưu ý rằng bạn không cần f=, tạo một chức năng chưa được đặt tên là tốt cho môn đánh gôn.
Jonathan Allan


1

APL NARS, 23 ký tự

{1≥⍵:0⋄(1=⍴π⍵)∧3>⍴π⍵+2}

Ở đây, π⍵ trả về mảng các thừa số ⍵ khác với 1; một số thử nghiệm:

  f←{1≥⍵:0⋄(1=⍴π⍵)∧3>⍴π⍵+2}
  f 101
1 
  f 223
0 
  f 233
1 
  f 1
0
  f ¯10
0

1

Regex (ECMAScript), 31 byte

^(?!((xx+)(\2(xx))*)(\1\4)+$)xx

Hãy thử trực tuyến! (hiển thị tất cả các số nguyên tố Chen ≤ 1000)

Cho một chuỗi n x s regex này sẽ khớp nếu và chỉ khi n là số nguyên tố Chen.

Nó khẳng định rằng n lớn hơn 2 và chuỗi không có dạng ((xx+)(\2(xx))*)(\1\4)+
này Biểu thức này có hai nghĩa, tùy thuộc vào số lần (\2(xx))lặp lại.
Khi được lặp lại 0 lần, regex có thể được đơn giản hóa (xx+)\1+, khớp với các số tổng hợp.
Khi nó được lặp lại một số lần dương, regex tương đương với((xx+)(\2xx)+)(\1xx)+

Regex đó yêu cầu một số lời giải thích, tuy nhiên, tôi sẽ cung cấp một cái nhìn sâu sắc.
Nếu bạn đi qua các đại số bạn thấy rằng ((xx+)(\2xx)+)(\1xx)+số trận đấu của các hình thức a*b*c-2nơi a≥4,b≥2,c≥2.
Vì vậy, nó sẽ khớp (gần như) bất cứ khi nào n +2 có nhiều hơn 2 thừa số nguyên tố. (tức là không nguyên tố cũng không bán nguyên tố)
Lưu ý rằng nó không khớp với 6, 16 hoặc 25, nhưng điều này không quan trọng, vì tất cả chúng đều là hợp số.

Vì vậy, (?!((xx+)(\2(xx))*)(\1\4)+$)sẽ phù hợp miễn là n không phải là hỗn hợp và n +2 là số nguyên tố hoặc bán nguyên tố.
Thật không may, điều này bao gồm 1 (và 0), vì vậy chúng tôi sau đó kiểm tra xem n có ít nhất 2 vớixx

Một vài "31-byters" khác nhau là:

^xx(?!((x*)(\2xx)+)\1?(\1xx)*$)
^(?!(xx((x*)(\3xx)+))\2?\1*$)xx

1

Ruby , 49 41 byte

->n{/^(.?|((..+)\3+))(\2+|..)$/!~?l*n+=2}

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

Cảm ơn H.PWiz cho -8 byte

Làm sao?

Điều đầu tiên, nhận được một chuỗi 'l'lặp lại n + 2 lần. Sau đó áp dụng regex để kiểm tra xem:

  • Độ dài là 2 hoặc 3 (.?)(..)
  • Độ dài là một số tổng cộng cộng 2 ((..+)\1)(..)
  • Độ dài là tích của ít nhất 3 số ((..+)\2)\1+

Hai phần regex tạo ra trường hợp thứ tư không có ý nghĩa và an toàn để bỏ qua : (.?)\2+, giải quyết thành chuỗi rỗng hoặc một ký tự đơn vì \2trống.


Bạn có thể hợp nhất hai nửa của bạn |gần nhau hơn : ^((..+)\2+)(\1+|..)$. Ngoài ra, một sự trùng hợp ngẫu nhiên mà bạn đã cố gắng giải quyết vấn đề này với regex vào cùng thời điểm với tôi :)
H.PWiz

Tôi tin rằng bạn có thể sử dụng .thay vì .?đầu vào luôn ít nhất là 1
H.PWiz

0

Julia, 59 byte

x->((0∉x%(2:x-1))&(length(find(x->x==0,(x+2)%(2:x)))<=2))


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.