问题详细:
13195的所有质因数为5、7、13和29。
600851475143最大的质因数是多少
问题分析:
先来了解一下什么是质因数:
质数:在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式 [1] 。只有一个质因子的正整数为质数。
举个栗子:
- 1没有质因子。
- 5只有1个质因子,5本身。(5是质数)
- 6的质因子是2和3。(6 = 2 × 3)
- 2、4、8、16等只有1个质因子:2。(2是质数,4 =2²,8 = 2³,如此类推)
- 10有2个质因子:2和5。(10 = 2 × 5)
所有通俗的来讲就是能整除给定数的一个或多个质数就称为质因数。
代码思想:
求出给定整数的最大(最小)质因数:
1.先把所有的质因数拿出来。
1.1假设给定的整数为num,判断(num% i(i的范围={0,num-1})==0),把i都输出出来,然后再做对比。
出现的问题:输出的质因数应该放在那里,怎么去做对比。
2.质因数之间做对比,找出最大或者最小的质因数
百度百科给出的思想:
将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
代码实现:
public class Demo01 {
public static void main(String[] args) {
//求1-100的质数之和
// int i ,j, sum = 0;
// for ( i=2; i<=100; i++){
// for( j=2 ; j <= i ; j++){
// if (i % j == 0 && i != j){
// break;
// }
// if (j==i){
// sum = sum+i;
// System.out.println("质数为:"+i);
//
// }
// }
//
// }
// System.out.println("质数之和为:"+sum);
// 求整数的最大或者最小除数为素数的除数
// 素数比较的中间值:EQ
int EQ = 0;
Scanner z=new Scanner(System.in);
System.out.println("请输入要求最大和最小除数为素数的数:");
//num =控制台输入的整数
long num = z.nextLong();
//循环查找能整除num的除数i,
// 思路:
// 都一个for循环:遍历的范围:2-num,
// 第一个if 找出能整除num的i
// 第二个for循环以及第二,三个if:判断i是否为素数
// 第四个if 用中间值EQ去记录找出来最大的素数
for (int i = 2; i < num ;i++){
if(num % i ==0){
for (int j = 2;j <= i ; j++){
if (i % j ==0 && i != j){
break;
}
if (j==i){
//求出最大质数
if (EQ < i){
EQ = i;
}
}
}
}
}
System.out.println("最大质数为"+EQ);
}
}
有更简单的方法,咱们在小W的算法之路(2)中再更新
RESPECT&LOVE :一起进步&一起成长