13195的质因数右 5、7、13、29
我们求 60085147513 的最大质因数是多少?
- 解题思路:
- 首先我们要了解最大最大质因数是什么?
- 我们发现每个合数都可以被分解成质数的乘积,举个例子:
- 16 = 2^ 2 ^2 ^ 2 所以2就是16的最大质因数
- 10 = 2 ^ 5 所以2和5就是10的质因数,而5是最大的,所以5就是10的最大质因数
- 这个时候我们就有了解题思路,可以使用该数的因数对该数进行分解,再继续对分解后的数求最大质因数,这样我们的计算量将极大缩小。
public static int(int x){
// i来进行遍历
int i = 2;
// res 用来计算最大质因数
int res = 1;
while(i>2){
if(x%2==0){
x/=2;
res = x;
}else{
i+=1;
}
}
- 附上解题代码:
package practice.欧拉计划;
/**
* 13195的质因数右 5、7、13、29
* 我们求 60085147513 的最大质因数是多少?
*
* 这道题的我们的思路是 通过while循环
*
* 每个合数都可以写成几个质数(也可称为素数)相乘的形式 [2] ,
* 这几个质数就都叫做这个合数的质因数。如果一个质数是某个数的因数,
* 那么就说这个质数是这个数的质因数;而这个因数一定是一个质数。
*/
public class 最大质因数 {
//private static long N = 600851475143L;
private static long N = 16;
public static void main(String[] args) {
long i = 2;
long res = 1;
while (N > 2){
if(N%i == 0){
// 将最大因数来进行分解
N /= i;
if(isPrime(N)){
res = N;
}
}else{
i += 1;
}
}
System.out.println("600851475143的最大质因数是:"+ res);
}
private static boolean isPrime(long n){
if(n==1){
return false;
}
for(long i=2;i*i<=n;i++){
if(n%i==0){
return false;
}
}
return true;
}
}