[알고리즘 교육] ALGO-2 최대 및 최소 공배수

자원 제한

시간 제한 : 1.0 초 메모리 제한 : 256.0MB

문제 설명

양의 정수 N이 주어지면 1에서 N까지의 세 숫자를 선택하도록 요청하십시오. 최소 공배수의 최대 값은 얼마입니까?

입력 형식

양의 정수 N을 입력합니다.

출력 형식

찾은 최소 공배수를 나타내는 정수를 출력합니다.

샘플 입력

9

샘플 출력

504

데이터 규모 및 규칙

1 <= N <= 10 ^ 6。

분석 ( Na Yixiao이 가장 매력적입니다 )이 선생님의 분석은 매우 포괄적입니다! ! ! 이 선생님의 분석을 다시 인쇄하세요 ~

n과 n-1 및 n-2가 서로 소수 인 경우 결과는이 세 숫자의 곱입니다.

수 이론의 지식에 따르면 : 1보다 큰 인접한 두 자연수는 서로 소수입니다.

n이 홀수이고, n과 n-2가 모두 홀수이고, n-1이 짝수 일 때 세 개의 공약수는 확실히 2가 아닙니다. 연속, 2보다 큽니다. 어떤 숫자도 그들 중 어느 두 개도 공약수가 될 수 없습니다. 결과는 그 세 가지의 결과입니다.

n이 짝수이면 n * (n-1) * (n-2)는 확실히 작동하지 않을 것입니다. n과 n-2는 둘 다 짝수이기 때문에 n-2를 n-3으로 만 변경할 수 있습니다. 즉, n * (n-1) * (n-3),이 세 숫자가 서로 소수이면 결과 여야합니다.

그러나 n과 n-3의 차이가 3이기 때문에 숫자 중 하나를 3으로 나눌 수있을 때 다른 숫자도 반드시 있어야합니다. 그리고 그들 중 하나가 불가능할 때 다른 하나는 확실히 불가능합니다 그리고 n은 짝수이고 n-3은 홀수이기 때문에 2는 둘의 공약수가 될 수 없습니다. 3보다 큰 숫자의 경우이 세 숫자 또는 두 숫자의 공약수가되는 것은 확실히 불가능합니다. 따라서 3 개만 판단하면됩니다.

n이 3을 나눌 수 있다면 n * (n-1) * (n-3)은 확실히 작동하지 않을 것입니다. 왜냐하면 n과 n-3은 공약수가 3이고 그 결과는 작아야하기 때문입니다. One은 n * (n-1) * (n-4)이고 n-4는 짝수이므로 다음으로 계속할 수 없습니다 .n * (n-1) * (n-5) = n ^ 3 -6 * n ^ 2 + 5 * n 그리고 이것이 가능하다면 그 값은 (n-1) * (n-2) * (n-3) = n ^ 3 -6 * n ^보다 작아야합니다. 2 + 11n-6 (n> 1 인 경우) 및 (n-1) * (n-2) * (n-3)은 마지막 홀수에서 요구 사항을 충족하기 위해 찾을 수 있으므로 판단 할 필요가 없습니다. n-5까지. 직접 답을 (n-1) * (n-2) * (n-3);

그리고 n은 3을 나눌 수 없습니다. 그러면 결과는 n * (n-1) * (n-3)입니다. n도 n-3도 3을 나눌 수 없기 때문에 n-1이 3을 나눌 수 있는지는 중요하지 않습니다. , 그러나 다른 숫자는 불가능합니다. 위는 인증되었습니다.

 암호

#include<iostream>
using namespace std;
int main(){
	long long int n,minb=1;
	cin>>n;
	if(n<3){
		for(int i=2;i<n;i++)
			minb*=i;
		printf("%d",minb);
		return 0;
	}
	if(n%2==1) printf("%lld",n*(n-1)*(n-2));//n为奇数 
	else{	//n为偶数 
		if(n%3==0)	printf("%lld",(n-1)*(n-2)*(n-3));
		else printf("%lld",n*(n-1)*(n-3));
	}
	return 0;	
} 

또한 long long 사용에주의하세요. 10 ^ 6은 매우 크기 때문에 int를 사용하면 분할되지 않습니다 ~

이 질문은 좋습니다! ! !

추천

출처blog.csdn.net/WKX_5/article/details/114330237