답변:
첫 번째 버전은 34 개의 기호이며 Dyalog APL에서 여전히 지원되는 것과 같은 원래 단일 바이트 APL 문자 세트의 문자로 제한됩니다.
↑c/⍨n=+/¨c←,∘.,⍨v/⍨~v∊v∘.×v←1↓⍳n←⎕
설명:
n←⎕ ⍝ ask for a number, store as n
v←1↓⍳n ⍝ generate all integers from 2 to n
v∘.×v ⍝ compute the product table of any two such integers
v/⍨~v∊ ⍝ select those that don't appear in the product table
c←,∘.,⍨ ⍝ generate all possible pairs of these primes
n=+/¨c ⍝ check which pairs have a sum equal to n
↑c/⍨ ⍝ take the first that does
두 번째 버전은 소수를 확인 하는 기능을 이용하기 때문에 22 기호 길이 π
입니다.하지만 유니 코드를 사용하는 NARS2000 에서만 사용할 수 있으므로 UCS-2에서 바이트 수는 44 입니다.
2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
설명:
⎕ ⍝ ask for a number N
⍳ -1 ⍝ generate all naturals from 1 to N-1
(⍪,⌽) ⍝ arrange it into a table of all pairs of naturals with sum N
{∧/0π⍵} ⍝ check which pairs are made of all primes
2⍴(⌿⍨ ) ⍝ return the first pair that does
예
(⎕ : 숫자를 묻는 프롬프트입니다)
2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
4
2 2
2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
6
3 3
2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
8
3 5
2⍴(⌿⍨{∧/0π⍵})(⍪,⌽)⍳⎕-1
⎕:
124
11 113
¯2π⍳2πn
주요 발전기로 작동?
π
운영자는 정확히 무엇을합니까?
π
스위치는 ⍺
: ¯2πx
상기 x 번째 소수를 산출 ¯1πx
제 프라임 적은 X가보다 0πx
, 시험 소수성에 대한 X 1πx
, X보다 제 프라임 큰이며 2πx
, 소수의 수 X보다 작은 10πx
, X의 약수의 개수 11πx
합인 x의 모든 제수 12πx
와 13πx
Möbius 및 totient 함수입니다. 마지막으로, 모나드 πx
는 x의 소인수 분해를 반환합니다.
n=input();k=m=1;p={0}
while{n-k,k}-p:m*=k*k;k+=1;p|={m%k*k}
print n-k,k
Ideone에서 테스트하십시오 .
우리는 윌슨 정리의 목록을 사용합니다 .
항상 변수 m 은 k-1 계승의 제곱과 같습니다 . k 는 값 1 에서 시작 하고 m 은 값 0! ² = 1에서 시작 합니다. 집합 p 는 0 과 현재 소수 k 까지의 모든 소수 로 구성됩니다 .
각 반복에서 먼저 n-k 와 k 가 모두 p 에 속 하는지 확인합니다 . 이는 {nk, k} 및 p 의 설정 차이 가 비어있는 경우에만 해당됩니다 . 그럴 경우 조건이 거짓이며 루프가 계속됩니다.
참고 K> 0 , 및 {- K, K, N}가 어떤 양의 값의 조건을 만족시키는 K - N 소위 (골드 바흐의 추측이 참이라고 가정)을 0 에서 P는 위양성 이어질 않는다.
루프에서 k 와 m 을 업데이트 합니다. 의 새로운 값 m은 이다 ² ² × k² = K! - m × k² = (1 K) 과의 새로운 값 K는 인 K + 1 그래서, m = (K - 1)! ² 정지 전후 보유 업데이트.
그런 다음, set union을 수행하여 m % k × k 값 을 p에 더 합니다. Wilson의 정리에 따르면 k 가 소수 이면 1 × k = k 가되고 그렇지 않으면 0 × k = 0이 됩니다.
루프가 끝나면 n-k 및 k 의 마지막 값을 인쇄합니다.이 값은 sum n 으로 소수입니다 .
~(,2>.-1%]zip{{.,2>\{\%!}+,},!}?
명령 줄 인수를 받아들입니다. 예 :
echo "14" | ruby golfscript.rb goldbach.gs
-> [2 12]
다음을 사용하여 입력 번호의 모든 관련 파티션을 찾습니다.
(,2>.-1%]zip #If only zip were a one-character command! It is so often useful.
그런 다음 숫자가 소수가 아닌 첫 번째 파티션을 찾습니다.
{np,!}? #For each partition, filter down to elements that are not prime, and only accept if there are no such results (since [] is falsey).
복합 검사 블록 np
은 다음과 같습니다.
{.,2>\{\%!}+,}
이 블록은 주어진 숫자를 균등하게 나누는 모든 숫자로 필터링합니다. 이러한 숫자가 없으면 (숫자가 소수) 결과 []
는 GolfScript에서 거짓입니다.
a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];q=p[(a-p)%in%p][1];cat(a,":",q,a-q)
들여 쓰기 :
a=scan() #Take user input as a numeric
b=2:a
p=b[rowSums(!outer(b,b,`%%`))<2] #Find all primes from 2 to user input
q=p[(a-p)%in%p][1] #Check which a-p also belong to p and takes the first one
cat(a,":",q,a-q)
용법:
> a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];q=p[(a-p)%in%p][1];cat(a,":",q,a-q)
1: 72
2:
Read 1 item
72 : 5 67
후손을위한 112 자로 된 오래된 솔루션
a=scan();b=2:a;p=b[rowSums(!outer(b,b,`%%`))<2];w=which(outer(p,p,`+`)==a,T);cat(a,":",p[w[1,1]],p[w[1,2]])
들여 쓰기 :
a=scan()
b=2:a
p=b[rowSums(!outer(b,b,`%%`))<2]
w=which(outer(p,p,`+`)==a,T) #Find the index of valid combinations
cat(a,":",p[w[1,1]],p[w[1,2]]) #Prints the first valid combination
a=/^(xx+?)(?!(xx+)\2+$)x*(?=\1$)(?!(xx+)\3+$)/.exec("x".repeat(prompt()));alert(a[1].length+"+"+a[0].length)
이제 특수 기능 (기본 역 참조 지원, 긍정적 및 부정적 예측)에 대한 요구 사항이 적은 Goldbach 추측을 테스트하는 정규식이 있습니다.
이것은 String.prototype.repeat()
EcmaScript 6th edition 제안의 일부인을 사용합니다 . 현재이 코드는 Firefox에서만 작동합니다.
정규식으로 작업 할 때 간결한 명령이있는 더 나은 언어가 정말로 필요합니다 ...
a,b;i(x,y){return x>y?x%y?i(x,y+1):0:x>1;}main(){scanf("%i",&a);for(b=a/2;b-->1;)i(b,2)&&i(a-
b,2)&&printf("%i:%i+%i\n",a,b,a-b);}
int
함수 에서 선언 을 제거하여 8자를 면도 할 수 있습니다 i
. 를 제거하고 if
다른 이중 앰퍼샌드를 추가하여 다른 2자를 저장할 수 있습니다 .i(b,2)&&i(a-b,2)&&printf(...)
&&
. (나는 인수 유형 침묵에 익숙해지지 않을 것입니다 ...)
(define(p n)(=(length(factor n))1))
(define(g n)(when(even? n)(for(i 3 n 2)
(and(p i)(p(- n i))(println n {: } i { }(- n i))))))
(g(int(read-line)))
그것을 실행하는 코드를 포함합니다. 결과는 너무 관대합니다 ...
72: 5 67
72: 11 61
72: 13 59
72: 19 53
72: 29 43
72: 31 41
72: 41 31
72: 43 29
72: 53 19
72: 59 13
72: 61 11
72: 67 5
하스켈, 97C
g n=head[(a,b)|let q=p n,a<-q,b<-q,a+b==n]
p n=filter c[2..n]
c p=null[x|x<-[2..p-1],p`mod`x==0]
설명:
g
"goldbach"기능입니다. 호출 g n
하면에 추가되는 소수 쌍이 제공됩니다 n
.p
보다 적은 소수 목록을 생성하는 함수입니다. n
.c
정의하는 데 사용되는 주요 체커 함수입니다. p
입니다.예제 실행 :
*Main> g 4
(2,2)
*Main> g 6
(3,3)
*Main> g 8
(3,5)
*Main> g 10
(3,7)
*Main> g 12
(5,7)
*Main> map g [4,6..100]
[(2,2),(3,3),(3,5),(3,7),(5,7),(3,11),(3,13),(5,13),(3,17),(3,19),(5,19),(3,23),(5,23),(7,23),(3,29),(3,31),(5,31),(7,31),(3,37),(5,37),(3,41),(3,43),(5,43),(3,47),(5,47),(7,47),(3,53),(5,53),(7,53),(3,59),(3,61),(5,61),(7,61),(3,67),(5,67),(3,71),(3,73),(5,73),(7,73),(3,79),(5,79),(3,83),(5,83),(7,83),(3,89),(5,89),(7,89),(19,79),(3,97)]
입력 정수에 대한 모든 솔루션을 반환합니다.
Select[Tuples[Prime@Range@PrimePi[n = Input[]], 2], Tr@# == n &]
예를 들어, 1298이 입력되면 ...
{{7, 1291}, {19, 1279}, {61, 1237}, {67, 1231}, {97, 1201}, {127, 1171}, {181, 1117}, {211, 1087}, { 229, 1069}, {277, 1021}, {307, 991}, {331, 967}, {379, 919}, {421, 877}, {439, 859}, {487, 811}, {541, 757}, {547, 751}, {571, 727}, {607, 691}, {691, 607}, {727, 571}, {751, 547}, {757, 541}, {811, 487} , {859, 439}, {877, 421}, {919, 379}, {967, 331}, {991, 307}, {1021, 277}, {1069, 229}, {1087, 211}, { 1117, 181}, {1171, 127}, {1201, 97}, {1231, 67}, {1237, 61}, {1279, 19}, {1291, 7}}
작성된대로 각 솔루션을 두 번 반환합니다.
Union[Sort/@ %]
{{7, 1291}, {19, 1279}, {61, 1237}, {67, 1231}, {97, 1201}, {127, 1171}, {181, 1117}, {211, 1087}, { 229, 1069}, {277, 1021}, {307, 991}, {331, 967}, {379, 919}, {421, 877}, {439, 859}, {487, 811}, {541, 757}, {547, 751}, {571, 727}, {607, 691}}
julia> g(n)=collect(filter((x)->sum(x)==n,combinations(primes(n),2)))
g (generic function with 1 method)
julia> g(88)
4-element Array{Array{Int64,1},1}:
[5,83]
[17,71]
[29,59]
[41,47]
g(int(readline(STDIN)))
이전 버전 (150 자) :
p=lambda n:0 in[n % i for i in range(2,n)]
n=int(input())
[print('%d+%d'%(a, b))for b in range(2,n)for a in range(2,n)if not(a+b!=n or p(a) or p(b))]
새 버전 (ProgramFOX 덕분에) :
p=lambda n:0 in[n%i for i in range(2,n)]
n=int(input())
[print('%d+%d'%(a,b))for b in range(2,n)for a in range(2,n)if not((a+b!=n)|p(a)|p(b))]
모든 조합을 인쇄합니다 (예 :
4 2 + 2
10 7 + 3 5 + 5 3 + 7).
|
부울 형식과 함께 안전하게 사용할 수 있으므로(a+b!=n)|p(a)|p(b)
print([(a,b)for b in range(2,n)for a in range(2,n)if not((a+b!=n)|p(a)|p(b))])
(합이 n 인 튜플 목록을 인쇄 함). 8 바이트를 저장합니다.
r=range(2,n)
하고 참조 r
하면 더 많은 비용을 절약 할 수 있습니다.
파티에 조금 늦었지만 골프 기술을 연습하고 있습니다.
이 질문을 찾기 전에 실제로 이것을 코딩했습니다! 그래서 내 파이썬에는 다른 파이썬 솔루션이 사용하는 아름다운 람다가 포함되어 있지 않습니다.
import math
def p(n):
if n%2==0&n>2:return False
for i in range(3,n):
if n%i==0:return False
return True
X=int(input())
for i in range(2,X):
if p(i)&p(X-i):print i,X-i;break
"사용자 프롬프트"는 모든 J 골퍼의 골칫거리입니다. 힘들게 얻은 모든 캐릭터가 있습니다!
p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1
설명 :
".1!:1]1
- 1!:1
입력 (파일 핸들 1
) 에서 문자열 ( )을 읽고 숫자 ( ".
) 로 변환하십시오 .p:i.n=:
-이 숫자를 변수에 할당 n
한 다음 첫 번째 n
소수 를 가져옵니다 .+/~
- n
넓고 n
높은 추가 테이블을 만듭니다 .i.&n,
-표를 단일 목록으로 바꾸고 n
Goldbach의 추측이 참인 경우 의 첫 번째 색인을 찾습니다 .p:(n,n)#:
-인덱스에서 행과 열을 검색하고 해당 소수를 가져옵니다.용법:
p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1
666
5 661
p:(n,n)#:i.&n,+/~p:i.n=:".1!:1]1
1024
3 1021
프롬프트가 요구 사항이 아닌 경우 25 자 동사는 다음과 같습니다.
(,~p:@#:]i.~&,+/~@:p:@i.)
_ÆRfÆR.ị
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
_ÆRfÆR.ị Main link. Argument: n (integer)
ÆR Prime range; yield all primes in [1, ..., n].
_ Subtract all primes from n.
fÆR Filter; intersect the list of differences with the prime range.
.ị At-index 0.5; yield the last and first element.
~=primes;n=ARGS[]|>int
(n-~n)∩~n|>extrema|>show
함수가 허용 가능한 경우 코드가 32 바이트 로 단축 될 수 있습니다 .
~=primes
!n=(n-~n)∩~n|>extrema
~=primes
내장 소수 함수 에 대한 별명을 작성하여 인수까지 모든 소수 목록을 리턴합니다. n=ARGS[]|>int
첫 번째 명령 줄 인수를 구문 분석하여 저장합니다. N .
적합한 소수 쌍을 찾으려면 먼저 위에서 언급 한 소수 범위를로 계산합니다 ~n
. 그런 다음 n-~n
이러한 소수의 모든 차이점을 산출합니다. n .
∩
결과를 소수 범위와 교차 ( ) 함으로써 나머지 소수 p 가 n-p 도 소수가되도록합니다.
마지막으로 extrema
교차점에서 가장 낮고 가장 높은 소수를 취하므로 합은 n 이어야합니다 .
postgresql에서 :
create function c(c int) returns table (n int, m int) as $$
with recursive i(n) as
(select 2 union all select n+1 from i where n<c),
p as (select * from i a where not exists
(select * from i b where a.n!=b.n and mod(a.n,b.n)=0))
select * from p a, p b where a.n+b.n=c
$$ language sql;
"재귀에 왼쪽 외부 조인 없음", "재귀에 하위 쿼리 없음"과 같은 것이 아니라면 절반의 공간에서 할 수 있어야합니다 ...
출력은 다음과 같습니다.
postgres=# select c(10);
c
-------
(3,7)
(5,5)
(7,3)
(3 rows)
postgres=# select c(88);
c
---------
(5,83)
(17,71)
(29,59)
(41,47)
(47,41)
(59,29)
(71,17)
(83,5)
(8 rows)
@echo off&setLocal enableDelayedExpansion&for /L %%a in (2,1,%1)do (set/aa=%%a-1&set c=&for /L %%b in (2,1,!a!)do set/ab=%%a%%%%b&if !b!==0 set c=1
if !c! NEQ 1 set l=!l!%%a,)&for %%c in (!l!)do for %%d in (!l!)do set/ad=%%c+%%d&if !d!==%1 set o=%%c + %%d
echo !o!
깔끔하게 설정-
@echo off
setLocal enableDelayedExpansion
for /L %%a in (2,1,%1) do (
set /a a=%%a-1
set c=
for /L %%b in (2,1,!a!) do (
set /a b=%%a%%%%b
if !b!==0 set c=1
)
if !c! NEQ 1 set l=!l!%%a,
)
for %%c in (!l!) do for %%d in (!l!) do (
set /a d=%%c+%%d
if !d!==%1 set o=%%c + %%d
)
echo !o!
WITH v(x,y,s)AS(SELECT LEVEL,LEVEL,0 FROM DUAL CONNECT BY LEVEL<=:1 UNION ALL SELECT x,y-1,s+SIGN(MOD(x,y))FROM v WHERE y>1),p AS(SELECT x FROM v WHERE x-s=2)SELECT a.x,b.x FROM p a,p b WHERE:1=a.x+b.x;
언 골프
WITH v(x,y,s) AS
(
SELECT LEVEL,LEVEL,0 FROM DUAL CONNECT BY LEVEL<=:1
UNION ALL
SELECT x,y-1,s+SIGN(MOD(x,y))FROM v WHERE y>1
)
,p AS (SELECT x FROM v WHERE x-s=2)
SELECT a.x,b.x
FROM p a,p b
WHERE :1=a.x+b.x;