2011-01-10 2 views
2

여기서 심볼 = 의미하는데 사용되는 첫 번째 두 방정식 주어진 제를 찾을동시 모듈 식을 해결하는 코드?

,이어서

(1) n = a mod j 
(2) n = b mod k 

기본적

(3) n = c mod l 

경우 "합동이다." 내 목적을 위해, 나는 해결책이 존재한다는 것을 미리 안다.

C 또는 C++의 일부 코드를 사용하여이 작업을 수행하거나 라이브러리 또는 C/C++ 프로젝트에서 사용할 수있는 링크에 대한 링크를 제공합니다. 감사.

+0

당신은 너무 많은 미지수와 그 방정식을 풀 수있는 방정식을 가지고 있지 않은 것처럼 보입니다 ... –

+0

@ Mark : 아마'n '와'c '만이 알려지지 않은 것들이다. 'j''''''''''''''''와''l'''은 상대적으로 소수 일 때 너무 많은 알려지지 않은 것들이있을 수 있습니다. –

+0

나는 여기서 약간 불명확하다는 것을 알 수있다 : n, a, b, j, k는 모두 알려져있다. 유일한 미지수는 c와 l입니다. 미안합니다. – Goofy

답변

1

여기서는 무한한 산술 시퀀스를 나타내는 라이브러리가 유용 할 것이지만 나는 개인적으로 아무 것도 모른다. 그럼에도 불구하고 여기에 주어진 주어진 모듈 식으로부터 각각 n에 대한 가능성을 기본적으로 생성하고 교차점을 찾는 무차별 대입 솔루션이 있습니다. 그것은 "도약을"(의사 코드)에 의해 n의 가장 낮은 값을 찾습니다 번역은 매우 간단합니다 있지만

value_left := a 
value_right := b 

while value_left != value_right: 
    if value_left < value_right: 
     value_left := value_left + j 
    else: 
     value_right := value_right + k 
    end if 
end while loop 

return value_left % l // as in "leggo-mah-eggo!" 

, 당신은 실제 C 코드를 좋아하면 알려주세요.

5

a, b, j 및 k가 주어진 경우 l = jk이고 gcd (j, k) = 1이면 Chinese Remainder Theorem을 사용하여 c를 찾을 수 있습니다. (만약 j와 k가 사소한 GCD를 가지고 있다면, 해답 C는 존재할 수도 있고 존재하지 않을 수도 있습니다.)

관련 문제