İkiz primerlerin N inci çiftini bulun


26

İki asal sayı iki farklı ise ikiz asal sayılar olarak tanımlanır. Örneğin, 3 ve 5, 29 ve 31 gibi ikiz primerlerdir.

İkili asalların (n'in STDIN'den geldiği) ilk çiftini bulan ve bunları virgül ve boşlukla ayırarak STDOUT üzerine yazdıran bir program yazın. Bu kod golf, yani en kısa kod kazanır.

Örnek giriş:

3

Örnek çıktı:

11, 13

5
Bekleyin ... böylece kullanıcı, ns çift ikiz primerleri girecek ve bizden çıkmasını mı istiyorsunuz? Yani, sadece kullanıcı girişi ne geri yankı? ;-)
Iszi

Hmm ... Bu ifade biraz garipti! : P
Jwosty

Yanıtlar:


11

Haskell 118

main=putStrLn.(!!)[show n++", "++show(n+2)|n<-[2..],all((>0).rem n)[2..n-1],all((>0).rem(n+2))[2..n]].(+)(-1)=<<readLn

Tüm ikiz asal Kaba zorlamak ve n yazdırır inci çifti.


5
Güzel bir! Filtreleme işlevini ayırarak ve interactonun yerine kullanarak putStrLndaha da ileri gidebilir ve bunu 105'e aşağı a#b=all((>0).rem a)[2..a-b];main=interact$(!!)[show n++", "++show(n+2)|n<-[2..],n#1,(n+2)#2].(+)(-1).read
çekebilirsiniz

10

CJam, 29 26 bayt

Y4]{{:)_{mp}/&!}g}q~*", "*

Çevrimiçi deneyin.

Örnekler

$ for i in {1..10}; do cjam twin-primes.cjam <<< $i; echo; done
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

Nasıl çalışır

Y4]        " Push [ 2 4 ].                                                            ";
{          "                                                                          ";
  {        "                                                                          ";
    :)     " Increment each integer in the array.                                     ";
    _      " Duplicate the array.                                                     ";
    {mp}/  " For each integer in the array, push 1 if it's prime and 0 otherwise.     ";
    &!     " Compute the logical NOT of the bitwise AND of the two previous integers. "; 
  }g       " If the result is non-zero, repeat the loop.                              ";
}q~*       " Do the above “N” times, where “N” is the integer read from STDIN.        ";
", "       " Join the array by comma and space.                                       ";

9

Perl, 101 87

87 karakter

$n=pop;$r='^1$|^(11+?)\1+$';($t=1x$s)=~$r||"11t"=~$r||--$n||die"$s, ",$s+2,$/while++$s

101 karakter, önceki cevap

$n=pop;$r=qr/^1$|^(11+?)\1+$/;(1x$s)!~$r&&(1x($s+2))!~$r&&++$i==$n&&say($s,", ",$s+2)&&exit while++$s

Kullanımı:

$ perl ./twin_primes.pl 10
107, 109

açıklama

$n = pop;                 # Pulls twin prime pair counter from @ARGV
$r = qr/^1$|^(11+?)\1+$/; # The money line - a regex that verifies
                          # if a string of 1's has non-prime length

while ( ++$s ) {          # Loop over integers

                          # '&&' short-circuits
    (1 x  $s    ) !~ $r   # Negated regex match evaluates to true if $s is prime
 && (1 x ($s+2) ) !~ $r   # Same for $s + 2
 &&          ++$i == $n   # Counter to control which pair to print
 && say( $s, ", ", $s+2 ) # Print the line
 && exit                  # Terminate program
}

Primellik dışı regex'in çalışmaları bu SO sorusunda açıklanmaktadır .


..bu nedir?
seequ

@ TheRare: Bir sayının önceliğini kontrol etmek için bir regex kullanır.
Zaid,

1
Aklımı aldın. + 1'leyin.
seequ

@TheRare: Bunun neden işe yaradığına dair bir açıklama ekledim. Eminim hala gelişim için yer var :)
Zaid

2
Neler yapardım hemen hemen. Birkaç traş karakterler var:$n=pop;$r='^1$|^(11+?)\1+$';($t=1x$s)=~$r||"11$t"=~$r||--$n||exit say("$s, ",$s+2)while++$s
aschepler

8

C: 113

n,c,l;main(i){for(scanf("%d",&n),l=2;n;l=c==i?n-=i==l+2,i:l,i+=2)for(c=2;c<i&&i%c++;);printf("%d, %d\n",l-2,l);}

Örnek çalışma:

$ for i in $(seq 1 10); do echo $i | ./twinprimes; done
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

Dennis, bebe ve Alchymist'ten yardımların için teşekkürler.


scanfKomut satırı argümanları yerine birkaç bayt kaydedebilirsiniz . Ayrıca, o=0gereksiz çünkü oküreseldir.
Dennis,

mainvarsayılan bir int değişkeni tutabilir, artımlı cve iatamalar ve ifadeler arasında kodu kısaltabilir, atama ldöngünün üçüncü bloğu için birinciye geri getirilebilir, böylece parantez gerekmez ve printf'ta yalnızca bir karakter ayırıcı kullanmak kesinlikle olabilir daha kompakt hale getirin.
bebe,

Sağol bebeğim! Benim de c<=i-1aptalca bir şey olduğumu fark ettim .
millinon

Atama ifadesinde artış iyaparak bir baytı tıraş etmenin bir yolunu göremiyorum l, çünkü (yeni) değeri iazaltmak için kullanılıyor n. Herhangi bir ipucu?
millinon

Eğer doğru hatırlıyorsam, arttırabileceğim bir yer var, ama derleyicisine bağımlı olduğuna inanıyorum :(
bebe

6

CJam - 26

1e4,{mp},_2f-&qi(=_2+", "\

10000'den küçük astarlar için çalışır; 4daha büyük sayılar için daha yüksek bir üs ile değiştirebilirsiniz (potansiyel olarak 10 20'ye kadar ), ancak program yavaşlar ve daha fazla bellek kullanır.

Http://cjam.aditsu.net/ adresinde deneyin

Açıklama:

1e4,Diziyi yaratır [0 1 2 ... 9999]
{mp},sadece asal sayıları seçer
_2f-ve diziyi kopyalar ve her bir maddeden 2 çıkarır
&, iki diziyi keser, böylece her iki asal çiftin alt asallarını bulmak
qigirişi okur ve tamsayı
(=ayarlarına dönüştürür . dizini alır ve karşılık gelen (alt) ikiz üssü diziden alır, üsteli
_2+kopyalar ve 2
", "\, iki üssü arasındaki virgül ve boşluk koyar


4

Mathematica - 63 karakter

Print[#-2,", ",#]&@Nest[NestWhile[NextPrime,#,#2-#!=2&,2]&,1,n]

notlar

Bu aslında oldukça basit bir uygulama. Kısalma, neredeyse hiç şaşırtmayla sonuçlanmadı.

NextPrime bir sayıdan sonra bir sonraki üssü bulan bir yapıdır.

NestWhile[NextPrime,#,#2-#1!=2&,2]& bir sayıdan sonra bir sonraki ikiz asal çiftin daha büyük asalını bulan anonim bir işlevdir.

Nestbu anonim işlev nzamanlarını uygular .

Print[#-2,", ",#]&belirtimlere göre stdout'a basan adsız bir işlevdir. Ne yazık ki bu tek başına 63 karakterlik çözümden 18 karakter alıyor.

Örnek

In[1]:= Do[                                                                     
         Print[#-2,", ",#]&@Nest[NestWhile[NextPrime,#,#2-#!=2&,2]&,1,n],
         {n, 1, 10}
        ]
3, 5
5, 7
11, 13
17, 19
29, 31
41, 43
59, 61
71, 73
101, 103
107, 109

Güncelleme: Bu CJam çözümü yeniden uygulanarak iki karakter kaydedilebilir . Bununla birlikte, bu algoritma maksimum değerini sınırlar n. Sadece Nest...parçayı değiştirIntersection[#,#-2][[5]]&@Prime@Range[999]


STDIN'in nerede? :)
mfvonh

4

Javascript (E6) 92 96

Daha kısa ve uyumlu - stdin / stdout'u okumak için spidermonkey kabuğu kullanın (virgül ve boşluk ile). Benim 10000th çifti 1260989, 1260991 bilgisayarımda bir dakikanın altında bulur P yerine dizilebilmek
için kısa kullanmak p[n]=o=nyerine p.push(o=n). Ama bu oldukça yavaş ve ben zaten kod uzunluğu için kazanamayacağım.

m=readline();for(n=3,o=p=[];m;n+=2)p.every(e=>n%e)&&(m-=n-o<3,p.push(o=n));print(o-2+', '+o)

Firefox konsolunda denemek için:

m=prompt();for(n=3,o=p=[];m;n+=2)p.every(e=>n%e)&&(m-=n-o<3,p.push(o=n));alert(o-2+', '+o)

Ungolfed

Tüm ilk m ikizlerini bulan işlev (en büyük değeri döndürür):

T=m=>{
  for (o=n=3, p=[2], t=[]; !t[m-1]; n+=2)
    p.every(e => n%e) && (n-o-2 ? 0 : t.push(n), p.push(o=n))
  return t
}

Örnek: console.log(T(50))

[5, 7, 13, 19, 31, 43, 61, 73, 103, 109, 139, 151, 181, 193, 199, 229, 241, 271, 283, 313, 349, 421, 433, 463, 523, 571, 601, 619, 643, 661, 811, 823, 829, 859, 883, 1021, 1033, 1051, 1063, 1093, 1153, 1231, 1279, 1291, 1303, 1321, 1429, 1453, 1483, 1489]

Sadece sonuncusu:

L=m=>{
  for (o=n=3,p=[2]; m; n+=2)
    p.every(e => n%e) && (m -= n-o==2, p.push(o=n))
  return o
}

Ardından bu 2 satırı alın ve IO ekleyin

m = prompt()
for (o=n=3, p=[2]; m; n+=2)
  p.every(e => n%e) && (m -= n-o==2, p.push(o=n))
alert('o-2+', '+o)

4

J - 49 60 55 51 bayt

Basit bir yaklaşımla gitmeye karar verdim. İşlev t, giriş olarak bir asal sayı verilen bir sonraki ikiz üssü bulur (şimdi bu fişleve dahil edilir ). İşlev f, nci ikiz üssü bulur. Bu aynı zamanda J'de yazdığım ilk gerçek program olur.

f=:[:(":,', ',":@+&2)(4&p:(,{~-=2:)])^:_@>:^:(]`2:)

Örnekler:

   f 1
3, 5
   f 2
5, 7
   f 3
11, 13
   f 4
17, 19
   f 5
29, 31
   f 100000
18409199, 18409201

Sadece bazı kaşlar için, ağzı kapalı versiyona sahip olun.

twin =: (4&p:)(($:@[)`(,)@.(=(]+2:)))]
f    =: ((]-2:),])((0:{twin) ^: (]`(2:)))

Açıklama:

f=:[:(":,', ',":@+&2)(4&p:(,{~-=2:)])^:_@>:^:(]`2:)
                     (4&p:(,{~-=2:)])^:_@>:^:(]`2:)
                                        @>:^:(]`2:)  main loop
                                           ^:(]`2:)  Repeat n times, starting with value of 2
                                        @>:          Add one to the current value and apply to the following function.
                     (4&p:(,{~-=2:)])^:_             Get the next twin prime
                                     ^:_             Recurse until there's no change
                          (,{~-=2:)                  If next prime - current value == 2, return current value, otherwise the next prime.
                      4&p:                           Get the next prime
     (":,', ',":@+&2)                                Format the output and add 2 to the second value.
   [:                                                Apply the twin prime to the formatter.

Basically, if n is 4, this creates a recursion tree like this:
 let T be the recursion inside t
 and numbers between rows the return values of according function
   (t * n) 3
-> (t * 4) 3
-> t  t  t  t  3
   17 11 5  3
-> (T  T) (T  T) T  T  3
    17 13  11 7  5  3
-> 17

Bu, spesifikasyonlara uymak için biraz daha fazla çalışmaya ihtiyaç duyuyor: "onları STDOUT'ye, virgül ve boşlukla ayırarak yazdırıyor". Tabii ki algoritma ile ilgisi yok ama programın uzunluğunu arttırıyor
Szabolcs

@Szabolcs daha iyi?
seequ

Tabii ki, +1. J oldukça havalı.
Szabolcs

@Szabolcs Gerçekten öyle. Her ne kadar reeeeeally aklımı bükse de. Her zaman daha kolaylaşıyor (bu, elle yazdığım ilk programdı). Ayrıca teşekkürler.
14'de

4

C #, 265

using System.Linq;class P{static void Main(string[] args){var i=int.Parse(args[0]);int f=0,c=0;for(int j=1;;j+=2){var b=(Enumerable.Range(1,j).Count(x=>j%x==0)==2);if(f==0 && b){f=j;continue;}if(b){c++;if(c==i){System.Console.WriteLine(f+","+j);break;}j-=2;}f=0;}}}

2
+1 ama virgülten sonra boşluk bastığınızda bir boşluk eklemeniz gerekir
Cristian Lupascu 16:14

1
İki karakter daha kazanabilirsiniz: .Count(x=>j%x==0)==2)->.Count(x=>j%x<1)<3)
Cristian Lupascu

2
ayrıca sınıfınız Pyerine çağrılabilir Programve parametre ayerine aranabilir args.
Cristian Lupascu

1
Olduğu gibi derlenmeyecek - ondan )sonra fazladan var .Count(...)<3. Ayrıca değiştirerek biraz kaydedebilirsiniz var i=int.Parse(args[0]);int f=0,c=0;için int i=int.Parse(args[0]),f=0,c=0;. Bazı başlatıcıyı döngüden ayıklayarak bazılarını da kaydedebilirsiniz, yani c=0;for(int j=1;=> c=0,j=1;for(;.
Bob

Ayrıca, fordöngünün gövdesinin tam bir tekrarı , ayrıca using System:: using System.Linq;class P{static void Main(string[]args){int i=int.Parse(args[0]),f=0,c=0,j=1;for(;;j+=2)if(Enumerable.Range(1,j).Count(x=>j%x<1)>2)f=0;else if(f<1)f=j;else{if(++c==i){System.Console.WriteLine(f+", "+j);break;}j-=2;f=0;}}}238 karakter yerine tam bir ad kullanarak .
Bob


2

Perl, 100 95

$n=<>;$i=3;while($c<$n&&($l=$i++)){$i++until!grep{$i%$_<1}(2..$i-1);$c++if$i-$l<3}print"$l, $i"

Ungolfed:

$n = <>;          # Read from STDIN
$i = 3;           # Tiny hack because I know I don't need the number 2
while ($c<$n && ($l = $i++)) {   # $c counts the pairs, $l is the last prime
  $i++ until ! grep {$i%$_<1} (2..$i-1);   # Increase $i until it's not divisible by anything
  $c++ if $i-$l < 3   # If $i and $l are twin primes, count it
}
print "$l, $i"    # That damned comma added a whole character to my code!

2

T-SQL (2008+): 344

Asalları bulmak için bir CTE zorla, n saymak için pencere işlevi, ardından ikizleri bulmak için bir birleştirme zorlayın. Bir saniye içinde <1.000 çıktı için çalışıyor, <10.000 çıktı için bir dakikadan az.

Golf (SQLFiddle burada ):

WITH x(i) AS(SELECT 99 UNION ALL SELECT i-2
FROM x WHERE i>3),z AS(SELECT RANK()OVER(ORDER BY x.i)n,x.i
FROM x x LEFT JOIN x y ON x.i%y.i=0 AND y.i NOT IN(x.i,1)
WHERE y.i IS NULL)SELECT LTRIM(a)+', '+LTRIM(b)FROM(SELECT RANK()
OVER(ORDER BY x.i)n,x.i a,y.i b FROM z x,z y WHERE x.n=y.n-1
AND x.i=y.i-2) o WHERE n=3
OPTION(MAXRECURSION 0)

Okunabilen:

WITH x(i) AS (
   SELECT 99
    UNION ALL
   SELECT i-2
   FROM x
   WHERE i > 3
)
,z AS (
SELECT RANK()OVER(ORDER BY x.i)n,x.i
FROM x x
WHERE NOT EXISTS
  (SELECT *
   FROM x y
   WHERE x.i%y.i = 0
    AND y.i NOT IN (x.i,1)
  )
)
SELECT LTRIM(a)+', '+LTRIM(b)
FROM (
    SELECT RANK()OVER(ORDER BY x.i)n,x.i a, y.i b
    FROM z x, z y
    WHERE x.n = y.n+1
    AND x.i = y.i+2
) o
WHERE n = 3
OPTION(MAXRECURSION 0)

1

GolfScript 46

~[1 3]\{\{))}%.{:x,{)x\%!},,2=}/*@\-.}do;', '*

Çevrimiçi test: link

Açıklamalı kod:

~                       # parse the input as an int
[1 3]                   # add the array [1, 3] on the stack
\                       # invert the items on the stack
{                       # begin loop
  \                     # bring the array to the top of the stack
  {))}%                 # add 2 to each of the numbers in the array
  .{:x,{)x\%!},,2=}/    # check if numbers are prime (leaves a 0 or 1 for both numbers on the stack)
  *                     # multiply the two 0/1 numbers (will only get 1 if both are 1)
  @\-                   # subtract the result from the inital int
  .                     # copy the new int value on the stack to be consumed by the 'do' loop
}do                     # repeat until the initial int was taken down to 0
                        # at this point the array contains the two numbers we're looking for
;                       # get rid of the 0 from the stack
', '*                   # format the output

1

PHP 5.4, 223

Küçük değil, Ama bir php denemek.

$n=$argv[1];function i($k){for($i=2;$i<=(int)($k/2);$i++)if($k%$i==0)return 0;return 1;}function t($t){return (i($t) && i($t+2))?1:0;}$g=1;$d=0;do{if(t($g)==1){if($d<$n){$d++;}else{print_r([$g,$g+2]);break;}}$g++;}while(1);

1

C 309

Bir sonraki astarları alıp tuhaf ve hatta terimleri saklar ve farkın iki olup olmadığını kontrol eder.

int main()
{
int n;
scanf("%d",&n);
int a=2,b=3,k=2,q;
int odd=1;
int p;
if(n>0)
{
while(n)
{
k++;
p=1;
q=ceil(sqrt(k));
for(int i=2;i<=q;i++)
{
if(k%i==0)
{
p=0;
break;
}
}
if(p)
{
if(odd%2==0)a=k;
else b=k;
if(abs(a-b)==2)n--;
odd++;
}
}
}
printf("%d %d\n",a,b);
return 0;
}

1
Lütfen karekök değil! for (int i=2;i*i<=k;i++)
edc65

1

R, 91 karakter

a=scan();n=1;p=5;while(n!=a){p=p+1;q=p-2;if(sum(!p%%2:p,!q%%2:q)<3)n=n+1};cat(q,p,sep=", ")

Hiçbir şey gerçekten fantezi:

a=scan()
n=1
p=5
while(n!=a){
    p=p+1
    q=p-2
    if(sum(!p%%2:p,!q%%2:q)<3) # Check that p and q are both primes by checking
       n=n+1                   # the number of zeroes resulting from 
}                              # p modulo each integers 2 to p and same for q
cat(q,p,sep=", ")

Kullanımı:

> a=scan();n=1;p=5;while(n!=a){p=p+1;q=p-2;if(sum(!p%%2:p,!q%%2:q)<3)n=n+1};cat(q,p,sep=", ")
1: 10
2: 
Read 1 item
107, 109


0

JavaScript (Node.js), 162 karakter

Stdin'den okur, stdout'a çıkar, girdi için "erken" den çıkar <= 0.

t=process.argv[2],c=0,l=1;if(t>0){for(i=0;;i++){p=!Array(i+1).join(1).match(/^1?$|^(11+?)\1+$/);if(p){if(i-2==l){if(c>=t-1){console.log(l+", "+i);break}c++}l=i}}}

Kullanım (yukarıdaki komut dosyası olarak kaydedildi ntp.js):

>for /l %x in (0, 1, 10) do node ntp.js %x
>node ntp.js 0
>node ntp.js 1
3, 5
>node ntp.js 2
5, 7
>node ntp.js 3
11, 13
>node ntp.js 4
17, 19
>node ntp.js 5
29, 31
>node ntp.js 6
41, 43
>node ntp.js 7
59, 61
>node ntp.js 8
71, 73
>node ntp.js 9
101, 103
>node ntp.js 10
107, 109

0

AWK - 129

Dosya fsoe-pairs.awk:

{n=2;N=1
for(;;){if(n in L){p=L[n];del L[n]}else{p=n
if(n-N==2)if(!--$0){print N", "n;exit}N=n}P=p+n++
while(P in L)P+=p;L[P]=p}}

Çalıştırılıyor:

$ awk -f fsoe-pairs.awk
1
3, 5
$ awk -f fsoe-pairs.awk
2
5, 7
$ awk -f fsoe-pairs.awk
10
107, 109

(Komut girildikten sonra ilk satır girilir, ikincisi çıkılır)

Bu, yalnızca eleklerin gerekli kısmını ve önceden hesaplanan primleri depolayan "başka yerde tanımlanmış olanı bulana kadar" "yüzer erastosthen elek" olarak adlandırdığım bir ana jeneratör algoritmasına dayanmaktadır.


0

Piton 2 (75)

c=input()
n=3
while c:n+=2;c-=all(n%i&~2for i in range(2,n-2))
print(n-2,n)

Peki burada neler oluyor?

İlk önce, bir çift ikiz asal olup all(n%i&~2for i in range(2,n-2))olmadığını kontrol eden ifadeye bakalım (n-2,n).

Basit ifade , aralıktaki her böleni deneyerek ve tüm kalanların sıfır all(n%i for i in range(2,n))olup olmadığını kontrol ederek nasal olup olmadığını kontrol eder . Bu tam olarak bunu kontrol eder, çünkü Python olduğu gibi ve diğer tüm numaraları olduğu gibi davranır .i2<=i<=n-1all0FalseTrue

Şimdi, bölenler için (n-2)%i==0tam olarak ne zaman olduğunu gözlemleyin . Yani, biz üzerinde asallık kontrolü yapabilirsiniz ve her ikisi için kalanlar kontrol ederek aynı anda ve . Bu yapılabilir . Biz sadece aralığında bölenler denemek uğruna , ama bu yeterli yanı beri ve sürece bölenler olamaz . Biz sadece tek çalışacağız gelen başlangıç bölen bu komplikasyon ve bu önlemek için .n%i==2i>2nn-202all(n%i not in [0,2] for i in range(2,n-2))2<=i<=n-3n-2nn-1n-2n<=4n5i=2

İfadeyi n%i not in [0,2]içine n%i&~2koyarız, 0bunun Yanlış olduğunu ve diğer sayıların olduğunu hatırlayarak True. Operatör önceliği (n%i)&(~2)tam olarak ihtiyaç duyulan şeydir. Bit-tamamlayıcı ~2olduğunu ...11111101, onun Bitwise böylece andbir sayı sıfır aşımı ile 2'ın ikili basamak değeri. Bu, 0(yani False) yalnızca 0ve 2ne istediğimizi tam olarak verir .

Uf! Şimdi, ifadenin bir ikiz asal çiftin üst sayısının all(n%i&~2for i in range(2,n-2))olup olmadığını kontrol ettiğine sahibiz n. Gördüğümüz kadar Geriye kalan üzerlerinden yineleme etmektir cbunların nerede cgiriş yapılmış sayıdır. Bölen meselelerden kaçınmak için ile başlıyoruz 5ve sayıyoruz 2. Ne czaman durduğumda nişe yarayan , karşılaştığımız her seferde azalırız c=0. Sonunda, sonlandırdığımız ikiz asal çifti basarız.


0

T-SQL (2012 +), 255 karakter

Biraz da hızlanan daha kompakt bir T-SQL ikiz ana bulucu.

with t(n)as(select 2+number from spt_values where type='p')select*from(select concat(b,', ',a),rank()over(order by a)from(select n,lag(n)over(order by n)from t where not exists(select*from t f where f.n<t.n and t.n%f.n=0))z(a,b)where a=b+2)r(s,k)where k=2

İnsan okunabilir formatı ::

    with t(n)as(
        select 2+number 
        from spt_values 
        where type='p'
    )
    select *
    from(
        select concat(b,', ',a),rank() over (order by a)
        from(
            select n, lag(n) over(order by n)


    from t 
        where not exists(
            select 1 from t f 
            where f.n<t.n and t.n%f.n=0)
    ) z(a,b)
    where a=b+2
) r(s,k)
where k=2

Temel amaç, yerleşik sayı tablosunu (master..spt_values ​​type = 'p') ve bir CTE'ye sahip olan diğer adı kısa bir şey olarak kullanmamızdır. Kümemiz için 0 veya 1 önemsiz hata çekme endişesini ortadan kaldırmak için 2 ekliyoruz, şimdi 2,2050 adayımız var.

Z'nin en içsel sorgusu, tüm asalları 2'den 2050'ye kadar alır, n'den küçük bir sayı ile bölünebilen herhangi bir sayıyı filtreleyerek. Daha sonra lagönceki sonucu elde etmemize izin veren şık bir T-SQL 2012 pencereleme işlevi kullanıyoruz, bu nedenle şimdi Z'nin a ve b sonuçları asal P[n]ve P[n-1]sırasıyla. R sorgusu çıkış dizesini oluşturur ve ikiz olmayan primleri filtreler ve ayrıca K dediğimiz çıkış için bir sıra numarası oluşturur. Son olarak, R son sorgusu değişkenini değiştirerek Kth twin prime uygulamamızı ve filtrelememizi sağlar.


0

Mathematica - 71 bayt

n=Input[];
i=j=0;
While[j<n,i++;If[And@@PrimeQ[x={i,i+2}],j++]];Print@x
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.