로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 알고리즘 == 소인수분해를 할 합성수 <math>N</math>을 입력 받고 다음 과정을 시행한다. * 소인수 기저의 길이를 임의로 지정하거나, 소인수 크기의 상한값을 정한다. * 소인수 기저가 될 집합인 <math>\mathcal{B}={-1, 2}</math>를 지정하고, <math>p=3</math>부터 시작해서 <math>\left(\frac{N}{p} \right)</math>의 값이 +1인 소수들만을 모아서 위 집합에 집어넣는다. ** <math>\mathcal{B}={p_0, p_1, \cdots p_{n-1}}\ (p_0=-1)</math>과 같이 정리가 되면 이 목록을 메모리에 저장한다. * 함수 <math>y(x, a)=x^2-a^2N</math>을 지정한다. * <math>y(x, a)</math>의 절댓값이 작은 순서쌍 <math>(x, a)</math>를 중심으로 함숫값들을 셈한다. 여기서 순서쌍 내 두 값은 서로소이다. ** 즉 <math>a=1</math>부터 시작해서 <math>x=\lfloor a\sqrt{N} \rfloor \pm \delta, \delta \in \{0, 1, 2, \cdots\}</math>를 차례대로 대입한다. * <math>y(x)</math>의 값이 <math>\mathcal{B}</math> 내의 소인수들로 완전히 소인수분해가 되는지 여부를 조사한다. ** 이 조건을 만족하면 해당 합동식<math>x_k^2 \equiv y(x_k) \pmod N, y(x_k)=p_0^{r_{k0}}p_1^{r_{k1}}\cdot \cdots \cdot p_{n-1}^{r_{k(n-1)}}</math> 중 <math>x_k, u_k=(r_{k0}, r_{k1}, \cdots r_{k(n-1)})</math>을 메모리에 저장한다. * (◇) <math>x_k, u_k</math>의 값들이 <math>m</math>쌍 모이면, 합동식 찾기를 종료한다. 여기서 <math>m (\leq n)</math>은 아래 계산을 위한 충분한 개수이다. * <math>v_k=(s_{k0}, s_{k1}, \cdots s_{k(n-1)}), s=\begin{cases} 0 (r \text{even}) \\ 1 (r \text{odd}) \end{cases}</math>를 셈한다. 즉 <math>u_k</math>가 소인수의 실제 지수를 기록한 것이라면, <math>v_k</math>는 지수의 홀짝 여부를 나타낸 것이다. * <math>\displaystyle \sum_{k \in A} v_k=0</math>을 만족하는 <math>A \subset \{0, 1, \cdots m \}</math>를 찾는다. 여기서 벡터의 연산은 환 <math>\mathbb{Z}/2\mathbb{Z}</math> 내에서 이루어지며, 모든 성분은 0 또는 1로 구성된다. 또, 해당 조건을 만족하는 부분집합 <math>A</math>는 여러 개 나올 수 있지만 알고리즘에서는 그 중 하나를 찾아낸다. ** 만약 부분집합을 찾지 못했다면, (◇) 단계로 돌아가서 합동식을 추가로 찾고 (즉 <math>m</math>의 값을 올리고) 부분집합 찾기를 다시 시도한다. * <math>j \in A</math>인 인덱스에 대해, 앞서 저장해둔 <math>x_j, u_j=(r_{0j}, r_{1j}, \cdots r_{(n-1)j})</math> 식들을 모두 불러온다. * <math>\displaystyle X=\prod_{j}x_j,\ R_i=\frac{1}{2} \sum_{j}r_{ij},\ Y=\prod_{i=0}^{n} p_i^{R_i}</math>를 셈하면 구하려는 제곱합동식 <math>X^2 \equiv Y^2 \pmod N</math>을 이끌어낸다. * <math>\gcd(X \pm Y, N)</math>을 셈해서 주어진 합성수의 비자명한 약수를 찾아내면, 알고리즘은 성공한다. 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț