SAT에 팩토링 (RSA)을 인코딩하는 한 가지 방법은 곱셈기 회로를 사용하는 것입니다 (모든 회로는 CNF로 인코딩 될 수 있음).
하자 우리 정수 주어진다 가정 와 2 N 비트, C = ( C (1) , c를 2 , ⋯ , C 2 N ) 2 . 우리 찾는데 관심 개의 N 비트 정수 = ( 1 , ⋯ , N ) 및 A는 = ( B 1 , ⋯ , B의 N ) , 그 제품은 C = *C2nC=(c1,c2,⋯,c2n)2nA=(a1,⋯,an)A=(b1,⋯,bn) .C=A∗B
가장 순진한 인코딩은 다음과 같습니다.
C 2 N - 1 = ( N ∧ B , N - 1 ) (X) O , R ( N - 1 ∧ B N ) C R , R (Y) : (D) 2 N - 1 = ( n ∧ b n - 1 ) ∧ ( a n
c2n=an∧bn
c2n−1=(an∧bn−1)xor(an−1∧bn)
Carry:d2n−1=(an∧bn−1)∧(an−1∧bn)
c2n−2=(an∧bn−2)xor(an−1∧bn−1)xor(an−2∧bn)xord2n−1
그런 다음 Tseitin 변환을 사용하여 위의 인코딩을 CNF로 변환 할 수 있습니다.
이 접근법은 비교적 작은 CNF를 생성합니다. 그러나이 인코딩은 "Unit Propagation"을 지원하지 않으므로 SAT Solvers의 성능이 실제로 나쁩니다.
이 목적으로 사용될 수있는 다른 곱셈 회로가 있지만 더 큰 CNF를 생성합니다.