Hasilkan Primes Seksi


8

Sexy Primes adalah pasangan angka (n, m)seperti ndan mkeduanya prima, dan m = n + 6.

Anda perlu membuat fungsi yang akan mengambil bilangan bulat, memeriksa bilangan prima seksi dari 0 hingga bilangan bulat itu, dan mengembalikan array array.

Misalnya, listSexy(30)harus kembali [[5,11], [7,13], [11,17], [13,19], [17,23], [23,29]]atau setara.

Ini adalah sehingga program dengan bytecount terpendek menang!


Bisakah Anda jelaskan seperti apa format output yang diinginkan?
Howard

11
Bah, saya benci kalau tantangannya berubah setelah jawaban diajukan.
Griffin

2
Apakah ada alasan tertentu untuk memeriksa dari 0? Mengapa saya tidak perlu mengecek dari (5,11)? Definisi singkat tentang bilangan prima seksi harus diberikan di sini, sementara menautkan ke Wikipedia untuk bacaan lebih lanjut dipersilahkan.
pengguna tidak diketahui

1
Dalam bahasa Portugis Sexy Primes diterjemahkan sama dengan Sexy Cousins!
sergiol

Jawaban:


11

MATLAB 32

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

n adalah nomor Anda


1 Itu adalah alat yang tepat untuk pekerjaan itu: isprime. Bukan berarti op yang dimaksud itu.
Johannes Kuhn

5

J, 34 33 31 32 39 37 karakter

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

Kehilangan satu karakter yang menjaga bilangan prima di bawah batas ... dan 7 lainnya menyatakan fungsi.

Pemakaian:

   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

Edit

Sepertinya banyak jawaban baru yang tidak membuat fungsi, mengambil input atau membatasi kedua angka pada pasangan di bawah ini n- jika saya mengabaikan batasan itu juga saya bisa turun ke 28 karakter :

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


3

GolfScript, 32 karakter

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

Karena format output tidak ditentukan, kode di atas akan mencetak perdana yang lebih rendah dari setiap pasangan. Jadi angka xdimasukkan jika xdan x+6keduanya prima dan keduanya di bawah n. Masukan diberikan sebagai nomor tunggal pada STDIN.

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

Saya pikir Anda harus mencetak kedua bilangan prima. Itu bagian dari tugas.
ugoren

1
@ugoren Tugas diubah setelah saya mengirimkan versi saya. Saya akan mencoba dan menambahkannya ke versi saya segera.
Howard

Ya, jawaban Anda cocok dengan tugas awal.
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)

Dan solusi yang sama dalam inkarnasi K saat ini yang identik dengan solusi K3 kecuali kenyataan bahwa ia tidak memiliki operator mod inbuilt, yang menambahkan sekitar 14 karakter untuk 59

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

2

Python ( 93 90 99 95)

Yay untuk isprimefungsi cepat dan kotor !

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

1bukannya Trueakan menyelamatkan Anda 3 karakter ...
Wooble

Kenapa aku terus melewatkan itu? Tetap.
beary605

Anda tidak mendapatkan parameter batas. Juga, []dalam all()tidak diperlukan (setidaknya dalam Python 2.7).
ugoren

Wow benarkah? Keren! Saya akan menerapkan parameter.
beary605

Saya tidak tahu mengapa Anda mengurangi 1 dari x, tetapi Anda dapat menghapusnya untuk 2 karakter. Kemudian Anda dapat mengganti loop sementara dengan loop for dari 2 hingga input () + 1 untuk 2 karakter lainnya.
JPvdMerwe

1

Oktaf 39

Dimodifikasi jawaban MATLAB saya untuk mematuhi aturan baru (menjengkelkan). nadalah nilai Anda.

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

Dapat diuji di sini


1

C, 102 99 95 karakter

Mengembalikan array dalam C adalah sesuatu yang Anda coba hindari. Jadi fungsi smendapatkan batas ndan penunjuk ke array bilangan bulat, dan mengisinya dengan data. Setiap pasangan bilangan prima seksi ditempatkan di dua posisi dalam array. Jadi o[0]=5, o[1]=11, o[2]=7, o[3]=13. Fungsi menganggap array cukup besar.

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 karakter

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

Pemakaian:

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}

Output sampel:

[[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

Python, 137 132 126 122 116

Saya menyadari ini agak gagal, tapi ini jawaban pertama saya, jadi mengapa tidak.

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]

Menggunakan daftar pemahaman, serta fakta itu [] = False

f(x)sebenarnya mengembalikan semua faktor x, dan Anda kemudian dapat menemukan keunggulan dari itu.


Anda dapat berubah f(x)menjadi f=lambda x:not[y for y in range(2,x)if x%y==0]untuk menyimpan beberapa karakter. Anda juga dapat mengurangi nilai ifs pada akhir pemahaman daftar Anda f(x)&f(y)&(x-6==y).
beary605

@ beary605 Saya tidak benar-benar tahu banyak tentang para lama (yah, saya tidak tahu apa-apa), jadi saya akan mencarinya, tapi ya, Anda tidak seandainya.
ACarter

Lambda adalah fungsi anonim yang mengembalikan nilai. a=lambda x,y,z:(value here)sama dengan def a(x,y,z):return (value here).
beary605

Luar biasa, saya sepertinya mengerti. Diperbarui. Terima kasih!
ACarter

1

JavaScript (1 tweet = 140 Karakter)

Ini dia:

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}

Coba s(30).


1

J, 25 karakter

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

i.n menciptakan kisaran [0, n)

(,+&6)"0mengambil setiap bilangan bulat ndalam daftar dan membuat pasangann, n+6

(#~ condition)pada dasarnya adalah a filter, dan kondisi dalam kasus ini */"1@p:~&1, hanya memeriksa apakah pasangan hanya terdiri dari bilangan prima.


1

C # (279 karakter)

Pada dasarnya, ini solusi Saumil dengan beberapa penyesuaian. Saya tidak memiliki cukup reputasi untuk berkomentar, jadi ...

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);}}}}

Keluaran:

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..<>

pemakaian:

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

keluaran:

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())+"]");}}}

Tes online: http://ideone.com/4PwTW (dalam tes ini saya telah diganti int.Parse(a[0])dengan nilai int yang sebenarnya, karena saya tidak dapat memberikan argumen baris perintah untuk program yang berjalan di ideone.com)


0

Mathematica - 69 48 karakter

Dengan asumsi m telah diberi nilai

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)))

Output sampel: 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

Faktor 140

Bahasa ini menyenangkan dan menarik. Script pertama saya.

:: 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 ;

Pemakaian:

( 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 karakter)

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

Contoh:

 (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 karakter)

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);}}}}

Output:
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 89,83


Selamat datang di CodeGolf! Anda dapat menyimpan beberapa karakter jika Anda memberi kelas dan metode nama satu huruf (misal: class Pbukan class Program).
Cristian Lupascu

0

Haskell (65 karakter)

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

Hasil:

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)]

Tentang jawaban MATLAB di sini:

(Saya menghabiskan semua perwakilan saya untuk hadiah jadi belum bisa berkomentar dulu) . Google mengatakan: "fungsi isprime Matlab ... didasarkan pada Miller-Rabin yang probabilistik". Jadi sepertinya entri MATLAB harus didiskualifikasi.


0

R 85 81 karakter

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

Contoh dijalankan:

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";

program mencetak pasangan sebagai n,n+6dibatasi oleh linebreak. Jalankan dengan -r.

Saya memodifikasi fungsi is_prime saya (& menyelamatkan satu byte) sehingga mengembalikan 0untuk bilangan prima ke golf di Elvis.


0

Jelly , 13 byte (tidak bersaing)

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

Cobalah online!

Penjelasan yang ditingkatkan:

‘Ḷµż+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

Obj-C 64 karakter

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

isPrime diimplementasikan secara terpisah


6
Jika Anda mendeklarasikan fungsi isPrimeyang bukan bagian dari bahasa atau pustaka standar, Anda harus memasukkan jumlah karakter untuk fungsi itu sebagai bagian dari skor Anda.
Gareth
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.