`
zhou_zhihao
  • 浏览: 57210 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

问题3-600851475143的最大质因数

 
阅读更多

问题描述如下:

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

分享到:
评论
2 楼 zhou_zhihao 2010-11-29  
/**
	 * 最原始的实现
	 * 对于给定的n,使factor=2,3,4,5,6...,对于每个factor,当factor能被n完全整除时,就到下一个factor.
	 * 可以预见,所有被整除的factor都是质因数,当所有小的因数都被整除时,n将会变为1
         * 如n为20,factor为2时,20%2=0,n=n/2,n变为10,returnfactor为10,10%2=0,n=n/2,n变为5,(整除时将某一个因数整除完)然后下一个factor3,4,5,n%5=0,returnfactor=5,n变为1,跳出循环
	 * @param n
	 * @return
	 */
	private static Long getTheLargestPrimeFactor4(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;
	}
1 楼 jy1245626 2010-11-29  
第一个方法能不能加点注释,看不太懂。自己实现的和你的对比起来,代码多太多了,谢谢

相关推荐

    有趣的python-最大质因数

    600851475143最大的质因数是多少? 问题解决 这题我们可以利用质因数分解来解决。 首先,每个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数.,比如8=2乘2乘2,2就是8的质因数.12=2×2×3,2...

    欧拉计划1-50题

    题目给出了一个具体的例子,即13195的质因数为5、7、13和29,并要求找到600851475143的最大质因数。 - **关键知识点**: - **质因数分解**:将一个合数表示为其质因数的乘积的过程。 - **质数筛法**:常用的一种...

    project_euler:Project Euler 问题的解决方案 https

    project_euler Project Euler 问题的解决方案 ###Problem 1 - 3 和 5 的倍数### 如果我们列出所有 10 以下...数600851475143 的最大质因数是多少? ###Problem 4 - 最大的回文乘积### 回文数的读法是一样的。 两个两

    the_odin_project-project-euler1-3-:计算机最佳解决方案

    the_odin_project-project-euler1-3- ///最好由计算机解决 3 和 5 的倍数 问题 1 如果我们列出所有 10 以下是 3 或 5... 最大质因数问题3 13195的质因数分别是5、7、13、29。 数字 600851475143 的最大质因数是多少?

    euler-solutions:JS 欧拉解决方案

    euler-解决方案JavaScript 中以下问题的解决方案。 问题 1:3 和 5 的倍数 如果我们列出所有 10 以下是 3 或 5 的倍数的自然数,我们得到 3、5、6 和 9。...数 600851475143 的最大质因数是多少? 欧拉问题:

    ProJectEulerProblem3

    在解决这个问题之前,我们需要理解两个概念:质数因子和质因数分解。 - **质数因子**:能够整除给定数字的质数。 - **质因数分解**:将一个正整数表示为若干个质数的乘积的过程。 ### 二、算法设计思路 #### 1. ...

    欧拉计划1-20题中文

    #### 题目3:最大质因数 **题目描述:** 已知13195的质数因子有5、7、13和29。要求找出600851475143的最大质数因子。 **解析:** 要解决这个问题,我们可以从2开始逐个测试该数的质因数。每次找到一个质因数后,就...

    largest-prime-factor

    3. **调用函数**:最后,我们可以调用`primeFactors`函数,传入我们要查找最大质因数的数,然后得到结果。 ```javascript const numberToCheck = 600851475143; const largestPrimeFactor = primeFactors...

    欧拉计划.doc

    这通常涉及到分解质因数的过程,即从最小的质数开始,不断除以该质数直到不能再被整除为止,然后继续下一个小于当前数的质数,直到找到最大质数因子。 **关键概念**: - **质数检测**:确保在分解过程中只使用质数...

    leetcode2sumc-Problem-Solving:惊人的编码问题与解决方案

    leetcode 2 和 c 问题解决 在这里,您可以通过他们的解决方案找到许多编码问题。 NPTEL 作业中的问题 要找到给定半径值的圆的周长和面积。您应该在程序中使用 ...如果半径为零或小于零,则打印“请输入非...的最大质因数是

    ProjectEuler:5个ProjectEuler问题及其解决方案

    可以通过分解每个数的质因数,然后取每个质因数的最大幂次作为最小公倍数。 ```javascript function lcm(numbers) { const factors = {}; for (const num of numbers) { for (let i = 2; i ; i++) { while (num...

Global site tag (gtag.js) - Google Analytics