semiprime 을 인수 분해하고 싶습니다 . 이 과제의 목표는 두 개의 작은 정수를 찾을 수 있습니다 U를 하고 v에 그런 유 v에 N이 이렇게 쉽게의 요인을 공제 할 수 하찮게 페르마의 방법으로 인수 분해 될 수 없음을 .
작업
세미 프라임 과 양의 정수 k가 주어지면 x 와 y 를 다음 과 같이 정의합니다 .
y=x2−kN
1 단계 -k 찾기
y 가 정사각형 숫자 ( 일명 완벽한 정사각형) 가 되도록 가능한 가장 작은 값을 찾아야합니다 .
이를 통해 Fermat의 인수 분해 방법을 단일 반복하여 을 인수 분해 할 수 있습니다 . 보다 구체적으로, 이것은 즉시 다음으로 이어집니다.
(업데이트 :이 시퀀스는 이제 A316780으로 게시됩니다 )
2 단계 -k를 분해
그런 다음 두 개의 양의 정수 와 v 를 찾아야합니다 .
c u = x + √
여기서 와 d 는 N 의 주요 요소입니다 .
요약
너의 임무는 을 입력으로 취하고 u 와 v 를 임의의 순서와 합리적인 형식으로 인쇄하거나 출력 하는 프로그램이나 함수를 작성하는 것입니다.
예
N = 199163을 고려하자
1 단계
의 가장 작은 가능한 값 은 40입니다 .
Y=2,8232-40×199,163=7,969,329-7,966,520=2,809=532KN=(2823+53)×(2823-53)k는N=2,876×2,770
2 단계
분해의 정확한 인 K = 4 × 10 때문 :
규칙
- 입력은 세미 프라임이어야합니다.
- 이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.
- 표준 허점은 금지되어 있습니다.
테스트 사례
N | k | Output
-----------+------+------------
143 | 1 | [ 1, 1 ]
2519 | 19 | [ 1, 19 ]
199163 | 40 | [ 4, 10 ]
660713 | 1 | [ 1, 1 ]
4690243 | 45 | [ 9, 5 ]
11755703 | 80 | [ 40, 2 ]
35021027 | 287 | [ 7, 41 ]
75450611 | 429 | [ 143, 3 ]
806373439 | 176 | [ 8, 22 ]
1355814601 | 561 | [ 17, 33 ]
3626291857 | 77 | [ 7, 11 ]
6149223463 | 255 | [ 17, 15 ]
6330897721 | 3256 | [ 74, 44 ]
구현 예
N
이 실제로 세미 프라임 일 것이라는 보장이 있습니까?