정의
-
전단 사 함수 세트에서
S
세트로는T
행 함수S
에T
이러한 하나 개 소자T
에서 정확히 하나 개의 요소에 의해 매핑된다S
. -
세트 내에서 전단 사 함수는
S
에서 전단 사 함수이다S
에S
. -
자연수는 보다 큰거나 같은 정수입니다
0
. -
서브 세트는
S
세트의 모든 요소가도 있음 세트 등이다S
. -
적절한 서브 세트는
S
서브 세트 인 세트이다S
동일하지 않다S
.
직무
자연수를 입력으로 받아 자연수를 출력하는 프로그램 / 기능을 작성하십시오. 이는 전단 사 함수이어야하며, 프로그램 / 기능 하에서 소수의 화상은 {f(p) : p ∈ ℙ}
, 한 부분 집합이어야 ℙ
, ℙ
프라임 숫자이다.
채점
이것은 code-golf 입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점이 적용됩니다 .
답변
Mathematica, 54 48 바이트
±(t=x_?PrimeQ)=NextPrime@x
±n_:=Abs[n-1]/.t:>x-1
다음 bijection을 정의합니다.
n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
±n 1, 0, 3, 5, 2, 7, 4, 11, 6, 8, 9, 13, 10, 17, 12, 14, 15, 19, ...
기본 아이디어는 각 소수를 다음에 매핑하여 적절한 하위 집합에 매핑되도록하는 것입니다. 결과적으로 2 에서 “간격”이 발생 합니다. 이 차이를 메우기 위해 4 에서 2 로 매핑 한 다음 서로의 복합 번호를 이전 복합 번호 로 매핑 하여 간격을 “버블 링”하려고합니다. 2 와 3 은 인접한 두 개의 소수뿐 이므로 두 매핑을 모두 ” n-1 또는 소수 인 경우 n-2 ” 로 표현할 수 있습니다 . 마지막으로,이 매핑은 1 을 0으로 보내고 결국 n-1 의 절대 값을 취하여 0 을 1 로 다시 보냅니다 .
답변
MATL , 21 바이트
실수를 발견 한 Emigna 에게 감사합니다.
tZp?_Yq}q:Zp~fX>sG~E+
이것은 다음 bijection을 구현합니다. 아래에 프라임을 작성하고 비 프라임을 작성하십시오.
2 3 5 7 11 13 17 ...
0 1 4 6 8 9 10 ...
그런 다음 입력에서 화살표를 따라 출력을 얻습니다.
2 > 3 > 5 > 7 > 11 > 13 > 17 ...
^
0 < 1 < 4 < 6 < 8 < 9 < 10 ...
설명 된 코드
t % Implicit input. Duplicate
Zp % Is it a prime? Gives true / false
? % If so
_Yq % Next prime
} % Else
q % Subtract 1
: % Range from 1 to that
Zp~ % Is each entry not a prime? Gives an array of true / false
f % Find non-zero entries, i.e. non-primes. Will be empty for input 1
X> % Maximum. This gives the greatest non-prime less than the input.
% Will be empty for input 1
s % Sum. This is to transform empty into 0
G~E % Push input, negate, times 2. This gives 2 for input 0, or 0 otherwise
E % Add. This handles the case of input 0, so that it outputs 2
% End (implicit). Display (implicit)
답변
답변
자바 스크립트 (ES6), 82 77 75 바이트
Luis Mendo의 답변 과 동일한 논리를 구현합니다 .
f=(n,i=(P=(n,x=n)=>n%--x?P(n,x):x==1||-1)(x=n))=>x?x==n|P(n)-i?f(n+i,i):n:2
형식화 및 의견
f = ( // given:
n, // - n = input
i = // - i = 'direction' to move towards
(P = (n, x = n) => // - P = function that returns:
n % --x ? // - 1 when given a prime
P(n, x) // - -1 when given a composite number
: //
x == 1 || -1 //
)(x = n) // - x = copy of the original input
) => //
x ? // if the input is not zero:
x == n | P(n) - i ? // if n equals the input or doesn't match its primality:
f(n + i, i) // do a recursive call in the chosen direction
: // else:
n // return n
: // else:
2 // return 2
데모
답변
젤리 , 12 바이트
Æn_ḍ@¡ÆP?2»0
작동 원리
Æn_ḍ@¡ÆP?2»0 Main link. Argument: n (non-negative integer)
ÆP? If the input is prime:
Æn Compute the next prime after n.
Else:
ḍ@¡ 2 Do once if n is divisible by 2, zero times if not.
_ 2 Subtract 2.
So far, we've mapped all primes to the next prime, all even integers
(except 2) to the previous even integer, and all composite, odd,
positive integers to themselves. In particular, 0 -> 2, but 0 doesn't
have a preimage, so we need 0 -> 0.
»0 Take the maximum of the result and 0, mapping 0 -> max(-2, 0) = 0.