질문 3 - 600851475143의 최대 화질 계수

2053 단어 문제.
다음은 문제 설명입니다.
"13195의 질인수(또는 소인자, 소요소)는 5, 7, 13과 29로 600851475143의 최대 질인수는 얼마입니까?"
 
여기서 질인수의 개념은 군말하지 않는다.
 
코드는 다음과 같습니다.
 
private static Long getTheLargestPrimeFactor(Long n) {
		Long returnFactor = 1L;
		for (Long factor = 2L; n > 1; factor++) {
			if (n % factor == 0) {
				n /= factor;
				returnFactor = factor;
				while (n % factor == 0) {
					n /= factor;
				}
			}
		}
		return returnFactor;
	}

 
답이 나올 수 있습니다. 6857.
 
판단의 조건은 변화가 있을 수 있는지의 여부를 알 수 있다. 우리는 한 수의 질인수가 한 수의 제곱근보다 크면 안 된다는 것을 알고 한 수를 n으로 설정하고 그 어떠한 질인수primefactor<=n의 제곱근도 설정한다.
그러면 다음과 같이 판단 조건을 수정할 수 있습니다.
 
private static Long getTheLargestPrimeFactor1(Long n) {
		Long returnFactor = 1L;
		Double LargestFactor = Math.sqrt(n);
		for (Long factor = 2L; factor <= LargestFactor; factor++) {
			if (n % factor == 0) {
				n /= factor;
				returnFactor = factor;
				while (n % factor == 0) {
					n /= factor;
				}
			}
		}
		return returnFactor;
	}

 
 
또 다른 점이 개선되지 않았을까?
우리는 2가 모든 질인수 중 유일한 짝수라는 것을 감안하여 이 방면에 공을 들여 아무 말도 하지 않고 코드를 붙일 수 있다.
 
private static Long getTheLargestPrimeFactor2(Long n) {
		Long returnFactor = 1L;
		Long factor = 2L;
		Double LargestFactor = Math.sqrt(n);
		if (n % factor == 0) {
			n = n / factor;
			returnFactor = factor;
			while (n % factor == 0) {
				n /= factor;
			}
		} else {
			factor = 3L;
		}
		for (; factor <= LargestFactor; factor += 2) {
			if (n % factor == 0) {
				n /= factor;
				returnFactor = factor;
				while (n % factor == 0) {
					n /= factor;
				}
			}
		}
		return returnFactor;
	}

 
 
이만 마치겠습니다. 아낌없이 가르침을 주십시오.
@anthor ClumsyBirdZ

좋은 웹페이지 즐겨찾기