小W的算法之路(1)-----最大质因数

问题详细:

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 :一起进步&一起成长
请添加图片描述

感谢山大王wld 微信公众号:数据结构和算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值