Project Euler - 3

欧拉项目 题目3
problem:  The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ?
solution:   这个问题是求质因子(n可以被600851475143整除,且自身是一个质数)。我们知道最小的质数是2,那么从2开始,一直用600851475143 整除factor,如果能整除就一直整除,这样可以保证这个较小质数的倍数不会再出现,比如一直除2,那么2最后除尽之后,不会再出现4的倍数,8的倍 数。 n /= facotr, 可以将要求的数一直变小,这样可以节省很多开销。最后当 n == factor 时,算得 n == 1, 结束循环, 由于最后一次factor多自加了一次,所以最后return需要先自减一次。



public static int findLargestPrimeFactor(long n) {
		int factor = 2;
		while (n > 1) {
			if (0 == n % factor) {
				while (0 == n % factor) {
					n /= factor;
				}
			}
			factor++;
		}
		factor -= 1;
		return factor;
	}


optimization: factor += (factor==2?1:2); 由于整除2的时候一定会把n整除为奇数,所以后面没有再自加为偶数的必要,所以选择自加2. 但是从第 一次2过渡到3时需要自加一,所以修改自加部分为:factor += (factor==2?1:2);

	public static int findLargestPrimeFactor2(long n) {
		int factor = 2;
		while (n > 1) {
			if (0 == n % factor) {
				while (0 == n % factor) {
					n /= factor;
				}
			}
			factor += (factor==2?1:2);
		}
		factor -= 2;
		return factor;
	}




该博客是本人为平时练习算法积累的笔记,只为平时积累和交流使用,本人能力有限,有些代码非本人思路,特此声明!

你可能感兴趣的:(算法,欧拉项目)