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!

Rohit
sumber
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

Grifon
sumber
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.)
Gareth
sumber
5

Mathematica , 35

{#,#+6}&~Array~#~Cases~{__?PrimeQ}&
Tuan Wisaya
sumber
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]
Howard
sumber
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}
tmartin
sumber
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
beary605
sumber
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

Grifon
sumber
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;
}
ugoren
sumber
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)
Paolo
sumber
1

Ruby 75 74

Versi baru menggunakan metode uji utama Artem Ice :

z=->x{(9..x).map{|i|[i-6,i]}.select{|a|a.all?{|r|(2...r).all?{|m|r%m>0}}}}

Tes online: http://ideone.com/yaOdn

Cristian Lupascu
sumber
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]]

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

ACarter
sumber
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).

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

rasionalis
sumber
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
Tuan Scapegrace
sumber
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
Toto
sumber
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)

Cristian Lupascu
sumber
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}]
DavidC
sumber
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))

defhlt
sumber
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 }
defhlt
sumber
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]]
Yury
sumber
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

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

Will Ness
sumber
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
plannapus
sumber
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.

Titus
sumber
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.
Erik the Outgolfer
sumber
-3

Obj-C 64 karakter

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

isPrime diimplementasikan secara terpisah

akshay1188
sumber
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