전통문화대전망 - 전통 미덕 - 큰 수가 소수인지 어떻게 알 수 있습니까?

큰 수가 소수인지 어떻게 알 수 있습니까?

고속 판단을 위해? 밀러-라빈 알고리즘 또는 aks 알고리즘.

1. 규칙 x%y 는 x 의 모듈 y, 즉 x 를 y 로 나눈 나머지, x < Y, x%y=x 인 경우 모든 모듈 피연산자는 정수입니다.

X y 는 x 의 y 제곱을 나타내고, 전력 연산은 곱셈 나누기 모듈보다 우선하며, 덧셈과 뺄셈의 우선 순위가 가장 낮습니다.

이렇게 x y/z 를 보면 먼저 힘을 계산한 다음 나눕니다.

A/B 는 A 를 B 로 나누고 B 를 A 로 나눕니다.

A%B=0 이면 a 는 b 로 나눌 수 있고 b 는 a 로 나눌 수 있습니다 .....

A*B 는 A 곱하기 B 또는 A 곱하기 B, B 곱하기 A, B 곱하기 A ... 다 똑같다.

2. 페르마의 정리: n 이 임의의 양의 정수이고, p 가 소수이고, n 이 p 로 나눌 수 없는 경우 (분명히 n 과 p 상호), n p% p = n (즉 n 의 p 제곱을 p 의 나머지로 나눈 n) 이 있습니다.

하지만 저는 많은 자료를 조사했고, 보시는 공식은 이렇습니다.

(n (p-1)% p =1분석 후 두 공식은 실제로 동일하며 상호 변형을 통해 얻을 수 있습니다.

원래 공식은 다음과 같이 변경할 수 있습니다: (n p-n)% p = 0 (즉, N 의 제곱에서 N 을 빼면 P 로 나눌 수 있습니다. 페르마의 작은 정리는 N 의 제곱을 P 의 나머지로 나눈 것을 알고 있기 때문입니다.). 하나를 넣으면 N p 가 n * (n (p- 1)) 이 되면 (n)

(n * (n (p-1)-1))% p = 0

위의 공식을 보면 n * (n (p- 1)- 1) 은 p 로 나눌 수 있다는 뜻입니다.

그리고 n * (n (p- 1)- 1) 은 확실히 n 으로 나눌 수 있기 때문에 (이것은 말할 것도 없습니다! ) 을 참조하십시오

그래서 n * (n (p- 1)- 1) 은 n 과 p 의 공배수이고 초등학교 지식은 _

그리고 전제는 N 과 P 상호질이고, 상호소수수의 최소 공배수는 그것들의 곱이기 때문에 반드시 존재해야 한다.

양의 정수 m 은 방정식을 성립시킵니다. n * (n (p-1)-1) = m * n * p.

양쪽에서 n 을 잘라 N (P- 1)- 1 = m * p 로 단순화합니다.

M 은 정수이기 때문에 분명히 n (p- 1)- 1)% p = 0, 즉 n (p-1) 입니다

2. 페르마의 정리: n 이 임의의 양의 정수이고, p 가 소수이고, n 이 p 로 나눌 수 없는 경우 (분명히 n 과 p 상호), n p% p = n (즉 n 의 p 제곱을 p 의 나머지로 나눈 n) 이 있습니다.

하지만 저는 많은 자료를 조사했고, 보시는 공식은 이렇습니다.

(n (p-1)% p =1분석 후 두 공식은 실제로 동일하며 상호 변형을 통해 얻을 수 있습니다.

원래 공식은 다음과 같이 변경할 수 있습니다: (n p-n)% p = 0 (즉, N 의 제곱에서 N 을 빼면 P 로 나눌 수 있습니다. 페르마의 작은 정리는 N 의 제곱을 P 의 나머지로 나눈 것을 알고 있기 때문입니다.). 하나를 넣으면 N p 가 n * (n (p- 1)) 이 되면 (n)

(n * (n (p-1)-1))% p = 0

위의 공식을 보면 n * (n (p- 1)- 1) 은 p 로 나눌 수 있다는 뜻입니다.

그리고 n * (n (p- 1)- 1) 은 확실히 n 으로 나눌 수 있기 때문에 (이것은 말할 것도 없습니다! ) 을 참조하십시오

그래서 n * (n (p- 1)- 1) 은 n 과 p 의 공배수이고 초등학교 지식은 _

그리고 전제는 N 과 P 상호질이고, 상호소수수의 최소 공배수는 그것들의 곱이기 때문에 반드시 존재해야 한다.

양의 정수 m 은 방정식을 성립시킵니다. n * (n (p-1)-1) = m * n * p.

양쪽에서 n 을 잘라 N (P- 1)- 1 = m * p 로 단순화합니다.

M 은 정수이기 때문에 분명히 n (p- 1)- 1)% p = 0, 즉 n (p-1) 입니다

2. 페르마의 정리: n 이 임의의 양의 정수이고, p 가 소수이고, n 이 p 로 나눌 수 없는 경우 (분명히 n 과 p 상호), n p% p = n (즉 n 의 p 제곱을 p 의 나머지로 나눈 n) 이 있습니다.

하지만 저는 많은 자료를 조사했고, 보시는 공식은 이렇습니다.

(n (p-1)% p =1분석 후 두 공식은 실제로 동일하며 상호 변형을 통해 얻을 수 있습니다.

원래 공식은 다음과 같이 변경할 수 있습니다: (n p-n)% p = 0 (즉, N 의 제곱에서 N 을 빼면 P 로 나눌 수 있습니다. 페르마의 작은 정리는 N 의 제곱을 P 의 나머지로 나눈 것을 알고 있기 때문입니다.). 하나를 넣으면 N p 가 n * (n (p- 1)) 이 되면 (n)

(n * (n (p-1)-1))% p = 0

위의 공식을 보면 n * (n (p- 1)- 1) 은 p 로 나눌 수 있다는 뜻입니다.

그리고 n * (n (p- 1)- 1) 은 확실히 n 으로 나눌 수 있기 때문에 (이것은 말할 것도 없습니다! ) 을 참조하십시오

그래서 n * (n (p- 1)- 1) 은 n 과 p 의 공배수이고 초등학교 지식은 _

그리고 전제는 N 과 P 상호질이고, 상호소수수의 최소 공배수는 그것들의 곱이기 때문에 반드시 존재해야 한다.

양의 정수 m 은 방정식을 성립시킵니다. n * (n (p-1)-1) = m * n * p.

양쪽에서 n 을 잘라 N (P- 1)- 1 = m * p 로 단순화합니다.

M 은 정수이기 때문에 분명히 n (p- 1)- 1)% p = 0, 즉 n (p-1) 입니다

제품 모델 분해 공식에는 먼저 보조 정리가 있습니다. 예: X%Z=0, 즉 x 가 z 로 나눌 수 있는 경우 (x+y)% z = y% z 가 있습니다.

세 개의 양의 정수 x, y, z 가 있다면 (x * y)% z = ((x% z) * (y% z))% z 가 있어야 합니다.

증명은 시간이 오래 걸렸고 상황에 따라 논의해야 한다.

1. x 와 y 가 모두 z 보다 크면 정수 a 와 b 가 있어야 다음 등식이 성립됩니다.

X=Z*I+A( 1)

Y=Z*J+B(2)

말할 필요도 없이, 이것이 바로 모형연산의 본질이다!

(1) 과 (2) 를 (X*Y)modZ 로 대체하면 (Z*I+A)(Z*J+B))%Z,

Z*(Z*I*J+I*A+I*B) 가 z 의 정수 배수이기 때문에 ... 오, 또 왔어요.

정리에 따르면 공식 (3) 은 (A*B)%Z 로 단순화될 수 있으며 A=X%Z, B=Y%Z 로 인해 원래 공식이 됩니다.

2. x 가 z 보다 크고 y 가 z 보다 작을 때 동일한 변환:

X=Z*I+A

대입 (X*Y)%Z 획득:

(z * I * y+a * y)% Z.

보조에 따르면 (a * y)% z 로 변환됩니다.

A=X%Z, Y=Y%Z 이기 때문에 위의 공식에 대입하면 원래 공식을 얻을 수 있습니다.

마찬가지로 x 가 z 보다 작고 y 가 z 보다 크면 원래 공식도 성립됩니다.

3. x 가 z 보다 작고 y 가 z 보다 작을 때 X=X%Z, Y=Y%Z 이므로 원래 공식이 성립됩니다.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

4. 제곱을 계산하는 빠른 알고리즘 (예: 2 13), 기존 방법에는 12 차 곱셈이 필요합니다.

[CPP] plaincopyprint 보기? /* 계산 n p */? 부호 없는 전력 (부호 없는 n, 부호 없는 p)? {? For(int I = 0;; 나 & ltp;; I+i++)n * = n;; -응? N 을 반환합니다 -응? }? /* 계산 n p */

서명되지 않았습니까? 전력 (부호 없음? N, 부호 없음? P)

{

For (내부? I = 0;; 나 & ltp;; I++)? N * = n

반환? N;

빌어먹을 곱셈, 최적화해야 해! 2*2 결과를 저장하여 다음과 같이 변하는지 확인합니다.

4*4*4*4*4*4*2

그런 다음 4*4 의 결과를 저장합니다.16 *16 *16 * 2.

1 * * * 5 연산은 각각 2 * 2,4 * 4,16 *16 *1입니다

이런 식으로, 우리의 알고리즘은 단지 절반의 곱셈만 계산하면 된다.

이 알고리즘을 파악하기 위해 2 7: 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 의 또 다른 예를 들어 보겠습니다.

쌍으로 구분: (2*2)*(2*2)*(2*2)*2

2*2 로 계산하면 지수를 2 로 나눌 수 있고, 불필요한 것은 없고, 나중에 따로 곱할 수 있다.

다시 2: ((2 * 2) * (2 * 2)) * (2 * 2) * 2 로 나눕니다.

사실, 마지막 괄호 안의 2 * 2 는 이번에 남아 있습니다. 그런 다음 나중에 개별적으로 곱합니다. 이제 지수는 1 이고 최종 결과는 16*4*2= 128 로 계산됩니다.