내 프로젝트에서 문제의 한 부분이 있습니다. 그러나 단순화하기 위해 여기에 문제가 공식화되고 있습니다. 두 개의 양수 정수인 a
과 b
이 있는데, 여기에서 a < b
입니다. a
의 배수는 1에서 b-1
까지이며 계수 연산은 b
입니다.공동 소수 (co-prime number)의 모듈러의 직렬 범위에 대한 빠른 알고리즘/공식
a mod b
, 2*a mod b
, 3*a mod b
, ..., (b-1)*a mod b
지금, 또 다른 정수가, n (1 <= n < b)
을 말한다. 목록의 첫 번째 n
숫자를 통해 m
(1 <= m < b
)보다 적은 숫자를 찾아야합니다. 이는 무차별 대입 방식으로 수행 할 수 있으므로 O(n)
이됩니다.
예 :
a=6, b=13, n=8, m=6
목록은 다음 두 공동 소수의 계수 연산은 생산 때문에
6, 12, 5, 11, 4, 10, 3, 9, 2, 8, 1, 7
이것은 1부터 12까지 번호의 순열 다른 번호, 즉 0
을 포함하면 숫자가 순열됩니다. a= 2, b=13
을 가져 가면 목록은 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11
이되어 패턴이됩니다. a
과 b
이 매우 큰 경우 (내 프로젝트에서 최대 10^20까지 갈 수 있음), 그런 많은 수의 패턴을 추론하는 방법을 모릅니다.
지금 예제로 되돌아지고, 우리가 m = 6
으로 less-than
연산자를 적용
6, 12, 5, 11, 4, 10, 3, 9
을 제공하는 목록에서 첫 번째 n = 8
번호를 가지고 , 그것은 m
것보다 적은 수의 총 수를 제공 (3) 같은리스트에 대해서 설명 0 지칭
0, 0, 1, 0, 1, 0, 1, 0
m
보다 작지 않고 1은 m
보다 작음을 나타냅니다. 이후
은 위의 알고리즘은 [0, 10^20]
의 범위에 사용할 수없는, 그래서 지역 사회가 O(log n)
솔루션, 또는 더 나은 O(1)
솔루션에 도달하는 저를 가능하게하기위한 힌트/힌트/팁을 줄 수있는하는 O(n)
입니까?