답변:
p=90930641353124136621573325641513715557077985927835294018496194596645372722158;q=101979812089012306249375934082966806799688507587087308196267706260111970225882#--223444799
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)
내가 추측 운이있어 후 추측 임의 주요 약수를 하루 종일 ...
(기본 c4.8xlarge spot limit은 4이지만 작년에는 10으로 충돌했습니다. FAAS 구성을 16 슬레이브에서 6 but (+3 mpi, 1 master)로 조정해야했습니다 .20m polyselect, 12h 50m sieving, 2h 25m linalg, 30m sqrt. 총 비용 ~ $ 70. 최소한 @orlp는 해결할 수있는 크기를 선택하기에 충분했지만 다시는하지 않겠습니다! 마지막 단계를 위해 @IlmariKaronen에게 감사드립니다. 추측 : P)
기발한:
#((()))****+,,---/2289;==oppppppqqqqqw~~
lambda n:pow(n,65537,10998167423251438693)
갈라진 금:
p=3207399658;q=3428998126#--11
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)
Wolfram Alpha에 의한 RSA 크래킹 . ;)
~p*~q
보다 짧습니다 -~p*-~q
. 죄송합니다.
(p*q-2*(p+q))/4
그래도 부품을 어떻게 리버스 엔지니어링 했습니까? :)
p/2
과 q/2
둘 다 이상한 소수 라는 사실 과 사용 가능한 문자를 사용하여 작동하는 무언가를 찾는 시행 착오에 대한 지식 .
p
하고 q
(진짜 기적은, 코드의 하나입니다 p-1
및 q-1
그러한 목적을 골프에 대한) (p-1)/2
우리가 가지고 주요 그래서이입니다 φ(φ(pq)) = ((p-1)/2-1)((q-1)/2-1)
. 이것은 우리의 모듈 역 계산 할 수 있습니다 65537
모드를 φ(pq)
우리는 모듈 식 역 논리를 구현하거나 또 다른 큰 상수를 하드 코딩 할 필요가 없기 때문에 많은 짧은 대답을, 오일러의 ID를 사용하여 (우리가 RSA를 위해 필요). -~q*-~p
-> 외에도 ~q*~p
당신은 정확히 내 기능을 발견했습니다 :)
φ(φ(pq)) = 2((p-1)/2-1)((q-1)/2-1)
안전 소수를 위해 p
하고 q
있기 때문에 φ(4) = 2
. 그러나 λ(φ(pq)) = lcm(2, (p-1)/2-1, (q-1)/2-1)
기껏해야 ((p-1)/2-1)((q-1)/2-1)/2
되며, 그 중 하나에서 1을 뺀 것은 지수를 위해 할 것입니다. :)
from bisect import*
q=int(input())
print(bisect([(h+1)**2 for h in range(q)],q))
이것은 정말로 깨지기 어려웠다! 파이썬 3 배포판에 포함 된 bisect 라이브러리를 사용합니다 . 이 bisect
함수는 정렬 된 목록과 요소를 가져오고 순서를 유지하기 위해 요소를 삽입 할 수있는 가장 오른쪽의 인덱스를 반환합니다. 우리는 그것으로 q
시작하는 사각형 의 길이 목록 1
과 요소를 제공 q
합니다.
(h+1)
을 제안하려고 했습니다 -~h
. 그리고 나는이 문제의 요점이 아니다 것을 깨달았다 : P
**
보다 우선 순위가 높은 것은 전혀 몰랐습니다 ~
. -~2**2
구문 오류가 발생하는 JS보다 낫다고 생각합니다 ( "** '의 왼쪽에는 괄호로 묶이지 않은 단항 표현식을 표시 할 수 없습니다).
**
ES2017에 추가 된 운영자 포함)이 완전히 없어 지도록 매우주의를 기울 였습니다.
기발한:
float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,
갈라진 금:
int loabewuteg(float p,i){return (i+0**+0,(p/17/(-4*-3)));}
글쎄, 그것은 충분히 쉬웠다. 가장 어려운 부분은 여분의 쉼표와 별표를 붙일 위치를 알아내는 것이 었습니다. 다행스럽게도 Processing은 C 스타일 쉼표 표현식뿐만 아니라 여분의 사용되지 않는 함수 매개 변수를 허용하는 것으로 보입니다.
기발한:
x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)
갈라진 금:
x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)
위의 base64 코드는 다음을 디코딩합니다.
Math.pow(x-1,0.5) //...
어디 ...
주석에 있기 때문에 JS 인터프리터가 무시하는 임의의 가비지 무리를 나타냅니다.
시행 착오 로이 솔루션을 찾았습니다. 결국, 유일하게 정말 까다로운 부분이 제대로 나머지 라인을 구성하고 얻을하는 데 필요한 코드의 시작 부분에 두 줄 바꿈이었다 M
에 Math
원래의 문자 세트에서 사용할 수 무언가에 base64로 인코딩은. 먼저 공백을 시도했지만 " M"
base64로 인코딩하고 나중에 코드에서 인코딩 할 "ICBN"
수있는 유일한 기능이 필요했습니다 . , ,B
".po"
"0+M"
"1*M"
"1?M"
또는 내가 생각할 수있는 다른 유사한 무 조작 접두사 중 하나가 작동하지 못했지만, 뉴 라인했다.
이것이 이것이 의도 된 해결책은 아니지만 의심 할 여지없이 작동합니다. :)
데모:
var f = x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)
var g = x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)
for (var i = -0; i <= 10; i++) console.log(i, '->', f(i), '->', g(f(i)))
원본 (ln (x + 1) 계산)
x=>Math.log(x+(+String(t=985921996597669)[5]))
갈라진 금
x=>Math[(lg=19979699+55686).toString(9+25)](x)
역수가 Math
내장되어 있다는 것을 깨닫지 못했다면 결코 이것을 깨지 않았을 것 입니다 . (lg=19979699+55686).toString(9+25)
돌아 오는 복잡한 방법입니다 "expm1"
.
expm1
"잠깐만 요."라고 말했습니다.
5#.[:,(3 5&#:(-$]-)7)#.inv"0]
[:(](07-5)"3 #.-:&#$,)5#.inv]
또 다른 균열은
[:((3 ]7-5)#.-:&#$,)5#.inv"0]
[:(](07-5)"3 #.-:&#$,)5#.inv] Input: integer n
] Get n
5 The constant 5
#.inv Get the digits of n in base 5
[:( ) Operate on those digits D
, Flatten D (does nothing since it is already a list)
# Get the length of D
-:& Halve it
$ Reshape D to half its length (only the base 2 digits)
(07-5)"3 The constant 2 with rank 3
#. Convert the front-half of D to a decimal from base 2
] Return the right result