크레이지 사서의 산술 시퀀스


18

사서가 당신이 분류 알고리즘 을 사용하여 직장에서 바람을 피우는 것을 잡았 으므로 이제 처벌을 받고 있습니다. 도서관 사서가 수학 교사의 필요없는 애정의 대상에 깊은 인상을 줄 수 있도록 몇 가지 코드를 작성하라는 명령을 받았습니다. 그래서 "할당 된 다른 의무" 무엇을 의미합니까?

모든 사람들은 기본 10의 자연수 시퀀스 N 에 익숙합니다 .

0, 1, 2, 3, 4, 5, 6, ...

그에서, 우리는의가 부르 자, 소수 시퀀스를 생성 할 수 있습니다 P 의 모든 요소하도록, P는 정확히 두 개의 약수가 N을 , 즉 1그 자체. 이 순서는 다음과 같습니다.

2, 3, 5, 7, 11, 13, ...

좋아, 지금까지 꽤 일상적인.

재치 함수 사서 사상 F (x, y)의 개수 얻어 x에서 N을 조건으로 0 <= x <= 9하고, 다수 yN 및 삽입 x으로 y, 즉 각 위치에서의 소수 확대 (, 붙이는 삽입 또는 추가 xy), 정렬 된 새 숫자 집합을 반환합니다.
예를 들어, F (6, 127)

1267, 1276, 1627, 6127

그래도 여전히 지루합니다. 사서는 오름차순으로 정렬 된 새로운 함수를 지정하여 사물을 조금 꾸미고 싶어합니다 z -> {p : p in P and F(z,p) subset of P}.
예를 들어 z (7)

3, 19, 97, 433, 487, 541, ...

때문에 37하고 73모두 소수이다, 719 179그리고 197모든 주요 등이다

참고 Z (2) 있다 더 프라임 때문에, 비어 2추가 이제까지 여전히 주요 수 없습니다. {0,4,5,6,8}도 비슷합니다.

당신의 임무는 주어진 x에 대해 순서 z (x) 에서 처음 100 개의 숫자를 생성하고 출력하는 코드를 작성하는 것 입니다.

입력

하나의 정수 X 하도록을 0 <= x <= 9. 함수 인수, STDIN 또는 이와 동등한 것을 통해 입력 할 수 있습니다.

산출

위에서 설명한 대로 순서가 z (x) 를 충족하도록 처음 100 개의 숫자를 선택하여 STDOUT 또는 그와 동등한 것으로 구분합니다 . 경우 (Z) (X)의 비어 등 {0,2,4,5,6,8}의 경우, 단어가 Empty Set아닌 출력한다.

제한 사항

  • 이것은 사서가 수학 교사와 손 경련을 쉽게 보여줄 수 있도록 이것을 색인 카드에 기록해야하기 때문에 코드 골프입니다.
  • 표준 허점 제한이 적용됩니다. 사서는 사기꾼을 용납하지 않습니다.

참조 순서

x = 1 : A069246
x = 3 : A215419
x = 7 : A215420
x = 9 : A215421

관련 : 가장 취약한 소수 찾기 / 문자열에서 가장 작은 소수를 찾기 / 여전히 자리 삭제 후 소수 가장 큰 소수 찾기

답변:


5

Pyth, 49 바이트

Python3 및 기타 Pyth 답변과 마찬가지로 100 개의 숫자를 찾는 런타임은 엄청납니다. (테스트 스위트는 10을 제공합니다)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

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


1
후행 "은 불필요하고 매우 훌륭한 작업입니다.
FryAmTheEggman

알림 주셔서 감사합니다. EOL은 더 이상 문자열을 종료하지 않기 때문에 종료되지 않은 문자열을 피했지만 물론 EOF는 여전히 작동합니다.
Brian Tuck

4

파이썬 3, 188 바이트

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

심하게 골프를 쳤지 만 지금은 뭔가 있습니다. p in P and F(z,p) subset of P확인하는 대신 , p*f각각에 대한 준 프라임을 확인합니다 f in F(z,p). 우선 순위 테스트를 위해 시험 분할과 결합하면 O(scary)알고리즘 을 얻게 됩니다.


+1O(scary)
AdmBorkBork

1
i를 없음으로 설정하는 좋은 방법입니다.
lirtosiast

3

펄, 124 바이트

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

다음 명령 행 옵션이 필요합니다 : -palMntheory=:all, 16으로 계산. stdin에서 가져온 입력.

용도 @DanaJMath::Prime::Util(프라 그마로드 펄에 대한 모듈 ntheory). 다음과 같이 사용하십시오.

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_prime2 64 미만의 모든 값에 대해 결정적 이며 이는 우리의 목적에 충분합니다.


샘플 사용법

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

예상 런타임

x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11.5s


1

피시스, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

테스트 스위트 는 나머지 10 개를 생성하는 데 너무 오래 걸리기 때문에 처음 10 개 숫자 만 계산합니다. 무차별은 우선 순위와 숫자 삽입을 모두 강제합니다. 내가 100까지 실행할 수 없었던 나쁜 성능을 보여 주므로 문제가 있는지 알려주십시오.

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