Tạo số nguyên tố gợi cảm


8

Số nguyên tố gợi cảm là cặp số (n, m)như nmcả hai đều là số nguyên tố và m = n + 6.

Bạn cần tạo một hàm sẽ lấy một số nguyên, kiểm tra các số nguyên tố gợi cảm từ 0 đến số nguyên đó và trả về một mảng các mảng.

Ví dụ, listSexy(30)phải trả lại [[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]hoặc một số tương đương.

Đây là vì vậy chương trình nào có số lần thắng ngắn nhất!


Bạn có thể giải thích định dạng đầu ra mong muốn trông như thế nào?
Howard

11
Bah, tôi ghét nó khi thử thách thay đổi sau khi câu trả lời đã được gửi.
Griffin

2
Có một lý do nhất định để kiểm tra từ 0? Tại sao tôi không nên kiểm tra từ (5,11)? Một định nghĩa ngắn về các số nguyên tố gợi cảm nên được đưa ra ngay tại đây, trong khi liên kết với Wikipedia để đọc thêm được hoan nghênh.
người dùng không xác định

1
Trong tiếng Bồ Đào Nha Sexy Primes dịch giống như Sexy anh em họ!
sergiol

Câu trả lời:


11

MATLAB 32

i=1:n;i(isprime(i)&isprime(i+6))

n là số của bạn


+1 Đó là công cụ phù hợp cho công việc : isprime. Không phải là op dự định nó.
Julian Kuhn

5

J, 34 33 31 32 39 37 ký tự

s=.[:(,.-&6)[:I.1([:*/p:)"1 i.,.6-~i.

Mất một ký tự giữ cả hai số nguyên tố dưới giới hạn ... và 7 ký tự khác khai báo một hàm.

Sử dụng:

   s 100
11  5
13  7
17 11
19 13
23 17
29 23
37 31
43 37
47 41
53 47
59 53
67 61
73 67
79 73
89 83

Biên tập

Có vẻ như rất nhiều câu trả lời mới không tạo ra hàm, lấy đầu vào hoặc giới hạn cả hai số trong cặp ở bên dưới n- nếu tôi bỏ qua những hạn chế đó, tôi có thể nhận được tới 28 ký tự :

(,.6&+)I.*/"1[1 p:(i.,.6+i.)


3

GolfScript, 32 ký tự

~),2>{:P{(.P\%}do(!},:L{6+L?)},p

Vì định dạng đầu ra không được chỉ định, mã ở trên sẽ in số nguyên tố thấp hơn của mỗi cặp. Do đó, một số xđược bao gồm nếu xx+6cả hai số nguyên tố và cả hai đều ở dưới n. Đầu vào được đưa ra dưới dạng một số duy nhất trên STDIN.

> 150
[5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 97 101 103 107 131]

Tôi nghĩ bạn nên in cả hai số nguyên tố. Đó là một phần của nhiệm vụ.
ugoren

1
@ugoren Nhiệm vụ đã được thay đổi sau khi tôi gửi phiên bản của mình. Tôi sẽ thử và thêm nó vào phiên bản của tôi sớm.
Howard

Vâng, câu trả lời của bạn phù hợp với nhiệm vụ ban đầu.
ugoren

2

K3 / Kona , 45

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}

.

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/x!'2_!x}'!x}100
(11 5
 13 7
 17 11
 19 13
 23 17
 29 23
 37 31
 43 37
 47 41
 53 47
 59 53
 67 61
 73 67
 79 73
 89 83)

Và giải pháp tương tự trong phiên bản hiện tại của K giống hệt với giải pháp K3 ngoại trừ thực tế là nó không có toán tử mod sẵn có, thêm khoảng 14 ký tự cho 59

{a@&6=(-).'a:,/a,\:/:a:&{(x>1)&&/{x-y*x div y}[x;2_!x]}'!x}

2

Con trăn ( 93 90 99 95)

Yay cho các isprimechức năng nhanh chóng và bẩn !

a=lambda x:all(x%i for i in range(2,x));b=2
while b<input():
 b+=1
 if a(b)&a(b+6):print b,b+6

1thay vì Truesẽ giúp bạn tiết kiệm 3 ký tự ...
Wooble

Tại sao tôi cứ bỏ lỡ điều đó? Đã sửa.
beary605

Bạn không nhận được một tham số giới hạn. Ngoài ra, []trong all()là không cần thiết (ít nhất là trong Python 2.7).
ugoren

Ồ, thật sao? Mát mẻ! Tôi sẽ thực hiện các tham số.
beary605

Tôi không biết tại sao bạn trừ 1 từ x, nhưng bạn có thể xóa số đó cho 2 ký tự. Sau đó, bạn có thể thay thế vòng lặp while bằng một vòng lặp for từ 2 thành input () + 1 cho 2 ký tự khác.
JPvdMerwe

1

Tháng Mười 39

Sửa đổi câu trả lời MATLAB của tôi để tuân thủ các quy tắc mới (gây phiền nhiễu). nlà giá trị của bạn.

p=@isprime;i=1:n;[j=i(p(i)&p(i+6));j+6]

Có thể thử nghiệm ở đây


1

C, 102 99 95 ký tự

Trả lại một mảng trong C là điều bạn cố gắng tránh. Vì vậy, hàm slấy giới hạn nvà một con trỏ tới một mảng các số nguyên và điền nó với dữ liệu. Mỗi cặp số nguyên tố gợi cảm được đặt ở hai vị trí trong mảng. Vì vậy o[0]=5, o[1]=11, o[2]=7, o[3]=13. Hàm giả định mảng đủ lớn.

x=7,l;
p(){
    return++l>=x/2||x*(x-6)%l&&p();
}
s(int n,int*o){
    for(;l=++x<=n;)p()?*o++=x-6,*o++=x:0;
}

1

R, 83 ký tự

f=function(n){library(gmp);p=isprime;for(i in 1:n)if(p(i)&p(i+6)){print(c(i,i+6))}}

Sử dụng:

f(150)


1

Ruby, 99 88 86 84 82 78

f=->x{(9..x).map{|n|[n-6,n]if[n,n-6].all?{|t|(2...t).all?{|m|t%m>0}}}.compact}

Đầu ra mẫu:

[[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29], [31, 37], [37, 43], [41, 47], [47, 53], [53, 59], [61, 67], [67, 73], [73, 79], [83, 89]]


1

Con trăn, 137 132 126 122 116

Tôi nhận ra đây là một chút thất bại, nhưng đó là câu trả lời đầu tiên của tôi, vậy tại sao không.

f=lambda x:not[y for y in range(2,x)if x%y==0]
i=30
print [(x,y)for x in range(i)for y in range(i)if f(x)&f(y)&x-6==y]

Sử dụng danh sách hiểu, cũng như thực tế là [] = False

f(x)thực sự trả về tất cả các yếu tố của x, và sau đó bạn có thể giải quyết vấn đề chính từ đó.


Bạn có thể biến f(x)thành f=lambda x:not[y for y in range(2,x)if x%y==0]để lưu một vài ký tự. Bạn cũng có thể giảm ifs ở cuối phần hiểu danh sách của bạn với f(x)&f(y)&(x-6==y).
beary605

@ beary605 Tôi thực sự không biết nhiều về lamdas (ừm, tôi không biết gì cả), vì vậy tôi sẽ xem xét điều đó, nhưng vâng, và không phải là ifs.
ACarter

Lambda là một hàm ẩn danh trả về một giá trị. a=lambda x,y,z:(value here)cũng giống như def a(x,y,z):return (value here).
beary605

Tuyệt vời, tôi dường như có được hang. Cập nhật. Cảm ơn!
ACarter

1

JavaScript (1 tweet = 140 ký tự)

Đây là:

function t(n,i){for(i=2;i<n;i++)if(!(n%i))return!1;return!0}function s(n,p){for(p=[],i=2;i<n-6;i++)if(t(i)&&t(i+6))p.push([i,i+6]);return p}

Hãy thử s(30).


1

J, 25 ký tự

(#~*/"1@p:~&1)(,+&6)"0 i.

i.n tạo ra một phạm vi [0, n)

(,+&6)"0lấy từng số nguyên ntrong danh sách và tạo thành một cặpn, n+6

(#~ condition)về cơ bản là một filtervà điều kiện trong trường hợp này */"1@p:~&1, chỉ cần kiểm tra xem một cặp chỉ gồm các số nguyên tố.


1

C # (279 ký tự)

Về cơ bản, đó là giải pháp của Saumil với một vài điều chỉnh. Tôi không có đủ danh tiếng để bình luận, vì vậy ...

using System;namespace X{public class P{static int l=100;static void Main(){F(0);}static bool I(int n){bool b=1>0;if(n==1){b=1<0;}for(int i=2;i<n;++i){if(n%i==0){b=1<0;break;}}return b;}static void F(int p){if((p+6)<=l){if(I(p+6)&&I(p)){Console.WriteLine(p+6+","+p);}F(p+1);}}}}

Đầu ra:

11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83

0

Perl: 73 char

sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>

sử dụng:

echo 30 | perl -E 'sub p{(1x$_[0])!~/^(11+?)\1+$/}map{$x=$_+6;p($_)&&p($x)&&say"$_,$x"}2..<>'

đầu ra:

5,11
7,13
11,17
13,19
17,23
23,29

0

C # 295

using System;using System.Linq;namespace K{class C{public static void Main(string[]a){Func<int,bool>p=i=>Enumerable.Range(2,i-3).All(x=>i%x>0);Console.WriteLine("["+String.Join(",",Enumerable.Range(0,int.Parse(a[0])).Where(i=>i>9&&p(i)&&p(i-6)).Select(i=>"["+(i-6)+","+i+"]").ToArray())+"]");}}}

Kiểm tra trực tuyến: http://ideone.com/4PwTW (trong thử nghiệm này tôi đã thay thế int.Parse(a[0])bằng giá trị int thực tế, vì tôi không thể cung cấp các đối số dòng lệnh cho các chương trình chạy trên ideone.com)


0

Toán học - 69 48 ký tự

Giả sử m đã được gán một giá trị

p=PrimeQ;Cases[Range@m,n_/;p@n&&p[n+6]:>{n,n+6}]

0

Scala (82)

def p(n:Int)=9 to n map(x=>List(x-6,x))filter(_.forall(l=>2 to l-1 forall(l%_>0)))

Đầu ra mẫu: Vector(List(5, 11), List(7, 13), List(11, 17), List(13, 19), List(17, 23), List(23, 29), List(31, 37), List(37, 43), List(41, 47), List(47, 53), List(53, 59), List(61, 67), List(67, 73), List(73, 79), List(83, 89))


0

Yếu tố 140

Ngôn ngữ này rất vui và thú vị. Kịch bản đầu tiên của tôi.

:: i ( n -- ? )
n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;
:: s ( n -- r r )
11 n [a,b] [ i ] filter [ 6 - ] map [ i ] filter dup [ 6 + ] map ;

Sử dụng:

( scratchpad ) 100 f

--- Data stack:
V{ 5 7 11 13 17 23 31 37 41 47 53 61 67 73 83 }
V{ 11 13 17 19 23 29 37 43 47 53 59 67 73 79 89 }

0

PARI / GP (62 ký tự)

f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w

Thí dụ:

 (00:01) gp > f(a)=w=[];forprime(x=0,a,isprime(x+6)&w=concat(w,[[x,x+6]]));w
 (00:01) gp > f(30)
 %1 = [[5, 11], [7, 13], [11, 17], [13, 19], [17, 23], [23, 29]]

0

C # ( 321 303 290 ký tự)

using System;namespace X{public class P{ static int l=100;static void Main(){F(0);}static bool I(int n){bool b=true;if(n==1){b=false;}for(int i=2;i<n;++i){if(n%i==0){b=false;break;}}return b;}static void F(int p){if((p+6)<=l){int m=p+6;if(I(m)&&I(p)){Console.WriteLine(m+","+p);}F(p+1);}}}}

Đầu ra:
11,5
13,7
17,11
19,13
23,17
29,23
37,31
43,37
47,41
53,47
59,53
67,61
73,67
79,73
89,83


Chào mừng đến với CodeGolf! Bạn có thể lưu một số ký tự nếu bạn cung cấp cho lớp và phương thức tên một chữ cái (ví dụ: class Pthay vì class Program).
Cristian Lupascu

0

Haskell (65 ký tự)

p n=[(x,x+6)|x<-[3..n-6],all(\k->all((>0).mod k)[2..k-1])[x,x+6]]

Đầu ra:

Prelude> p 100
[(5,11),(7,13),(11,17),(13,19),(17,23),(23,29),(31,37),(37,43),(41,47),(47,53),(
53,59),(61,67),(67,73),(73,79),(83,89)]

Về câu trả lời MATLAB tại đây:

(Tôi đã dành tất cả đại diện của mình cho một khoản tiền thưởng để không thể bình luận ngay) . Google cho biết: "chức năng trả trước của Matlab ... dựa trên xác suất Miller-Rabin". Vì vậy, có vẻ như mục MATLAB nên bị loại.


0

R 85 81 ký tự

f=function(n){m=2:n;a=m[rowSums(!outer(m,m,`%%`))<2];cbind(b<-a[(a+6)%in%a],b+6)}

Chạy ví dụ:

f(50)
      [,1] [,2]
 [1,]    5   11
 [2,]    7   13
 [3,]   11   17
 [4,]   13   19
 [5,]   17   23
 [6,]   23   29
 [7,]   31   37
 [8,]   37   43
 [9,]   41   47

0

PHP, 106 byte

function p($n){for($i=$n;--$i&&$n%$i;);return$i-1;}for(;++$i<$argv[1]-5;)p($i)|p($k=$i+6)?:print"$i,$k\n";

chương trình in các cặp như n,n+6được phân định bởi dấu ngắt dòng. Chạy với -r.

Tôi đã sửa đổi hàm is_prime của mình (& đã lưu một byte) để nó trả về 0các số nguyên tố để chơi gôn trên Elvis.


0

Jelly , 13 byte (không cạnh tranh)

‘Ḷµż+6$ÆPẠ$Ðf

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

Giải thích nâng cao:

‘Ḷµż+6$ÆPẠ$Ðf Main link. Arguments: z.
‘Ḷ            Range: [0..z].
  µ           Start a new monadic chain.
    +6        Add 6 to each element of x. (implicit x=⁸).
      $       Last two links (+6) as a monad.
   ż          Interleave x and y.
       ÆP     Do a primality check every element of every element of z.
         Ạ    Do an "all" check on every element of z.
          $   Last two links as a monad.
           Ðf Keep the elements of z that return a truthy value given this monad.

-3

Chars Obj-C 64

if([self isPrime:i]&&[self isPrime:i+6])NSLog(@"%d %d\n",i,i+6);

isPrime thực hiện riêng


6
Nếu bạn đang khai báo một hàm isPrimekhông phải là một phần của ngôn ngữ hoặc thư viện chuẩn, bạn cần bao gồm số ký tự cho hàm đó như một phần của điểm số của bạn.
Gareth
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.