Emirps를 찾아라!


20

emirp는 A는 비 상동 , 반대 경우도 소수 소수.

기본 10 emirps 목록은 OEIS 에서 찾을 수 있습니다 . 처음 6 개는 다음과 같습니다.

13, 17, 31, 37, 71, 73

그러나 반전 규칙으로 인해 각베이스마다 emirps가 다릅니다. 예를 들어 처음 6 개의 이진 emirps는 다음과 같습니다.

Bin  | 1011, 1101, 10111, 11101, 101001, 100101
Dec  | (11 , 13  , 23   , 29   , 37    , 41   ) 

... 16 진수로, 그들은 :

Hex |  17, 1F, 35, 3B, 3D, 53
Dec | (23, 31, 53, 59, 61, 83)

재미있는 사실 : 모든 숫자가 회문이기 때문에 단항에 emirps가 없습니다 .


도전

당신의 작업은, 두 개의 매개 변수를 사용하는 기능 (또는 전체 프로그램)을 생성하는 과 , 제 1의리스트 생성하는 기지국에 emirps .nbnb

규칙 / 세부 사항 :

  • n 과 는 모두 보다 큰 양의 정수 입니다.b0
  • 이라고 가정 할 수 있습니다 . 즉, 밑이 2 진과 16 진 사이에있을 것입니다.2b16
  • 까지의 값을 계산할 수 있어야합니다 .n 100
  • 생성 된 목록은 답변에이를 지정하는 한 기본 또는 언어의 표준 정수 기반이 될 수 있습니다.b
  • 내장 emirp 점검은 허용되지 않습니다 (내장 우선 테스트는 괜찮습니다)
  • emirps를 하드 코딩하거나 외부 파일을 읽을 수 없습니다.
  • 표준 허점은 언제나처럼 금지되어 있습니다.
  • 이것은 이므로 가장 짧은 답변 (바이트)이 이깁니다.

테스트 사례

각 테스트 사례에 대해 기본 b및 기본 10 등가 목록을 포함 시켰습니다 .

B = 2, N = 10

BIN: [1011, 1101, 10111, 11101, 100101, 101001, 101011, 101111, 110101, 111101]
DEC: [11, 13, 23, 29, 37, 41, 43, 47, 53, 61] 


B = 3, N = 5

BASE3: [12, 21, 102, 201, 1011]
DEC:   [5, 7, 11, 19, 31]


B = 12, N = 7

BASE12: [15, 51, 57, 5B, 75, B5, 107]
DEC: [17, 61, 67, 71, 89, 137, 151]


B = 16, N = 4

HEX: [17, 1F, 35, 3B]
DEC: [23, 31, 53, 59] 

당신은 내 (ungolfed) 파이썬 예제에 대해 더 프로그램을 테스트 할 수 있습니다 repl.it

답변:


6

젤리 , 16 바이트

bµU,ḅ⁹QÆPḄ=3
⁸ç#

TryItOnline!

방법?

bµU,ḅ⁹QÆPḄ=3 - Link 1, in-sequence test: n, b
b            - convert n to base b - a list
 µ           - monadic chain separation
  U          - reverse the list
   ,         - pair with the list
     ⁹       - link's right argument, b
    ḅ        - convert each of the two lists from base b
      Q      - get unique values (if palindromic a list of only one item)
       ÆP    - test if prime(s) - 1 if prime, 0 if not
         Ḅ   - convert to binary
          =3 - equal to 3? (i.e. [reverse is prime, forward is prime]=[1,1])

⁸ç# - Main link: b, N
  # - count up from b *see note, and find the first N matches (n=b, n=b+1, ...) for:
 ç  - last link (1) as a dyad with left argument n and right argument
⁸   - left argument, b

* b밑의 참고 는 b이며 [1,0], 반대로했을 때는 [0,1]이며 1, 소수는 아닙니다. b기본에서 한 자리 미만 b이므로 회문.


우승을 축하합니다!
FlipTack

8

05AB1E , 17 바이트

CP-1252 인코딩을 사용합니다 .

입력 순서는 n, b
출력이 10 진입니다.

µN²BÂD²öpŠÊNpPD–½

온라인으로 사용해보십시오!

설명

                    # implicit input a,b
µ                   # loop until counter is a
 N²B                # convert current iteration number to base b
    ÂD              # create 2 reversed copies
      ²ö            # convert one reversed copy to base 10
        p           # check for primality
         ŠÊ         # compare the normal and reversed number in base b for inequality
           Np       # check current iteration number for primality
             P      # product of all
              D     # duplicate
               –    # if 1, print current iteration number
                ½   # if 1, increase counter

4

Mathematica, 70 바이트

Cases[Prime@Range@437,p_/;(r=p~IntegerReverse~#2)!=p&&PrimeQ@r]~Take~#&

작동 0 <= n <= 100하고 2 <= b <= 16. 목록에서 Prime@Range@437첫 번째의 437소수, 찾기 Cases p를 Where IntegerReverse rp베이스가 #2동일하지 않습니다 p또한 소수가, 다음 첫 번째 수행 #등을 p.

다음은 임의 n>=0b>=2다음에서 작동하는 95 바이트 솔루션입니다 .

(For[i=1;a={},Length@a<#,If[(r=IntegerReverse[p=Prime@i,#2])!=p&&PrimeQ@r,a~AppendTo~p],i++];a)&

+1 IntegerReverse. 당연하지! 좋은.
DavidC

임의의 nb 솔루션의 경우 79 바이트 ; 바닥 글에 ing이 허용되는 경우 77 바이트Reap :For[i=j=0,j<#,If[(r=IntegerReverse[p=Prime@++i,#2])!=p&&PrimeQ@r,j++;Sow@p]]&
로마

3

펄, 262 바이트

($b,$n)=@ARGV;$,=',';sub c{my$z;for($_=pop;$_;$z=(0..9,a..z)[$_%$b].$z,$_=($_-$_%$b)/$b){};$z}sub d{my$z;for(;c(++$z)ne@_[0];){}$z}for($p=2;@a<$n;$p++){$r=qr/^1?$|^(11+?)\1+$/;(c($p)eq reverse c$p)||((1x$p)=~$r)||(1x d($x=reverse c($p)))=~$r?1:push@a,c($p);}say@a

읽을 수있는 :

($b,$n)=@ARGV;
$,=',';
sub c{
    my$z;
    for($_=pop;$_;$z=(0..9,a..z)[$_%$b].$z,$_=($_-$_%$b)/$b){};
    $z
}
sub d{
    my$z;
    for(;c(++$z)ne@_[0];){}
    $z
}
for($p=2;@a<$n;$p++){
    $r=qr/^1?$|^(11+?)\1+$/;
    (c($p)eq reverse c$p)||((1x$p)=~$r)||(1x d($x=reverse c($p)))=~$r?1:push@a,c($p)
}
say@a

c기본으로 주어진 수를 변환 $b하고, d기본에서 주어진 수의 변환 $b반환 기지 - 말했다 첫 번째 숫자 찾아 진수로 다시 $b전달하면 번호를 c. 그런 다음 for 루프는 회문인지와 복합 정규 표현식을 사용하여 두 숫자가 모두 소수인지 확인합니다.


3

Mathematica 112 바이트

Cases[Table[Prime@n~IntegerDigits~#2,{n,500}],x_/;x!=(z=Reverse@x)&&PrimeQ[z~(f=FromDigits)~#2]:>x~f~#2]~Take~#&

16 진수에서 처음 10 개의 Emip을 찾으십시오. 십진수로 반환하십시오.

Cases[Table[Prime@n~IntegerDigits~#2, {n, 500}], 
x_ /; x != (z = Reverse@x) && PrimeQ[z~(f = FromDigits)~#2] :> x~f~#2]~Take~# &[10, 16]


{23, 31, 53, 59, 61, 83, 89, 113, 149, 179}

언 골프

Take[Cases[                                             (* take #1 cases; #1 is the first input argument *)
   Table[IntegerDigits[Prime[n], #2], {n, 500}],        (* from a list of the first 500 primes, each displayed as a list of digits in base #2 [second argument] *) 
   x_ /;                                                (* x, a list of digits, such that *)
   x != (z = Reverse[x]) && PrimeQ[FromDigits[z, #2]]   (* the reverse of the digits is not the same as the list of digits; and the reverse list, when composed, also constitutes a prime *)
   :> FromDigits[x, #2]],                               (* and return the prime *)
   #1] &                                                (* [this is where #1 goes, stating how many cases to Take] *)

2

펄 6 , 91 바이트

->\n,\b{(grep {.is-prime&&{$_ ne.flip &&.parse-base(b).is-prime}(.base(b).flip)},1..*)[^n]}

10 진에있는 emirps 목록을 리턴합니다.




2

C, 293 286 261 바이트

@ceilingcat , 261 바이트 개선 :

v,t,i,j,c,g,s[9],r[9],b;main(n,a)int**a;{for(b=n=atoi(a[1]);g^atoi(a[2]);t|v|!wcscmp(s,r)||printf("%u ",n,++g)){i=j=0;for(c=++n;s[i]=c;c/=b)s[i++]=c%b+1;for(;r[j]=i;)r[j++]=s[--i];p(n);for(t=v;r[i];)c+=~-r[i]*pow(b,i++);p(c);}}p(n){for(j=1,v=0;++j<n;n%j||v++);}

온라인으로 사용해보십시오!

(이 사람은 끊임없이 PPCG를 따라 다니며 의견에 대한 내용을 개선하는 것과 같습니다. 감사의 말에 답장하자마자 그는 의견을 삭제하고 lol을 종료합니다. Welp, 다시 감사합니다!)


@movatica 286 바이트 개선 :

u,v,t,i,j,c,n,g;main(int x,char**a){char s[9],r[9],b=n=atoi(a[1]);x=atoi(a[2]);for(;g^x;){i=j=0;for(c=++n;c;c/=b)s[i++]=c%b+1;s[i]=c=0;for(;i;r[j++]=s[--i]);r[j]=0;p(n);t=v;for(;r[i];)c+=(r[i]-1)*pow(b,i++);p(c);t|v|!strcmp(s,r)?:printf("%u ",n,++g);}}p(n){for(u=1,v=0;++u<n;n%u?:v++);}

온라인으로 사용해보십시오!


내 원래 답변, 293 바이트 :

u,v,t,i,j,c,n,g;main(int x,char**a){char s[9],r[9],b=n=atoi(a[1]);x=atoi(a[2]);for(++n;g^x;++n){i=j=0;for(c=n;c;c/=b)s[i++]=c%b+1;s[i]=c=0;for(;i;r[j++]=s[--i]);r[j]=0;p(n);t=v;for(--i;r[++i];)c+=(r[i]-1)*pow(b,i);p(c);t|v|!strcmp(s,r)?:printf("%u ",n,++g);}}p(n){for(u=1,v=0;++u<n;n%u?:v++);}

로 컴파일 gcc emirp.c -o emirp -lm하고 실행하십시오 ./emirp <b> <n>. 공백으로 구분 된 emirps를 10 진으로 인쇄합니다.


@FlipTack 당신이 맞아요. 내일 고쳐야 겠어
OverclockedSanic

@FlipTack 테스트를 통과했는지 확인하고 수정했습니다. 이것이 좋은가요?
OverclockedSanic

당연히! 그리고 코드 골프에 오신 것을 환영합니다.
FlipTack

1
잘 하셨어요! 나는 당신을 내려 일부 증가 연산자를 이동 286
movatica

1
트윗 담아 가기 내 답변에 개선 사항을 추가했습니다. 감사!
OverclockedSanic

1

자바 스크립트 (ES6) 149 148 141 140 바이트

밑줄 b에서 공백으로 구분 된 emirps 목록을 리턴합니다. (소수점 목록을 대신 반환하여 2 바이트 더 짧을 수 있습니다.)

f=(b,n,i=2)=>n?((p=(n,k=n)=>--k<2?k:n%k&&p(n,k))(i)&p(k=parseInt([...j=i.toString(b)].reverse().join``,b))&&k-i&&n--?j+' ':'')+f(b,n,i+1):''

테스트 사례



0

APL (NARS), 87 자, 174 바이트

r←a f w;i
i←1⋄r←⍬
→2×⍳∼{∼0π⍵:0⋄k≡v←⌽k←{(a⍴⍨⌊1+a⍟⍵)⊤⍵}⍵:0⋄0πa⊥v:1⋄0}i+←1⋄r←r,i⋄→2×⍳w>≢r

결과는 10 진입니다. 테스트 및 결과 :

  3 f 1
5 
  2 f 10
11 13 23 29 37 41 43 47 53 61 
  3 f 5
5 7 11 19 31 
  12 f 7
17 61 67 71 89 137 151 
  16 f 4
23 31 53 59 

{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}기본 배열 정수 결과 에서 변환을 수행합니다 . 소수 0π⍵이면 true [1]을 반환하고 그렇지 않으면 0을 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.