分解质因数、以及查找1到100之间的质数——Java循环

1、分解质因数、以及查找1到100之间的——Java循环

举个简单例子,12的分解质因数可以有以下几种:12=223=43=112=2*6,其中1,2,3,4,6,12都可以说是12的因数,即相乘的几个数等于一个自然数,那么这几个数就是这个自然数的因数。2,3,4中,2和3是质数,就是质因数,4不是质数。那么什么是质数呢?就是不能再拆分为除了1和它本身之外的因数的数,如2,3,5,7,9,11,13,17,19,23,29等等。

1.1 对一个数进行分解的过程:

  1. 先要遍历所有小于等于 num 这个的数【用for循环】:其目的是找到质数
  2. 在这些数中找到质数【for循环】
  3. 判断找到的这些质数是不是质因数【分以下情况】:

3.1:如果是,则输出分解出来的这个质数,并改变 num 的值:目的是对num 进行重新分解,知道num 为1 为止,即分解完成
3.2:如果不是:则继续找下一个质因数(也就是回到out循环中继续)

分解质因数方法一:

// 分解质因数:20
    int num = 80;
    while (num > 1){
        // 遍历小于等于num 的所有数
        out:for (int i = 2; i <= num; i++) {
            // 下面的这个循环是为了判断所有小于等于 num 是不是质数
            for (int j = 1; j <= i >> 1; j++) {
                // 如果不是质数,则继续查找下一个质数
                if (j != 1 && i % j == 0) {     //这里的意思就是:除了 1 和它本身
                    continue out;
                }
                // 如果是质数,则判断它是不是质因数
                if (num % i == 0) {
                    //输出找到的质因数:
                    System.out.println(i);
                    //
                    num /= i;
                    // 查找改变之后的 num 的质因数
                    break out ;
                }
            }
        }
    }

写法二:
本质上和写法一没有什么区别

		while (num > 1){
            // 遍历小于等于num 的所有数
            out:for (int i = 2; i <= num; i++) {
                // 下面的这个循环是为了判断所有小于等于 num 是不是质数
                for (int j = 1; j <= i >> 1; j++) {
                    // 如果不是质数,则继续查找下一个质数
                    if (j != 1 && i % j == 0) {     //这里的意思就是:除了 1 和它本身
                        continue out;
                    }
                }
                // 如果是质数,则判断它是不是质因数
                if (num % i == 0) {
                    //输出找到的质因数:
                    System.out.println(i);
                    //
                    num /= i;
                    // 查找改变之后的 num 的质因数
                    break ;
                }
            }
        }

2、判断质数的

只有两个正因数(1和它本身)的自然数即为质数

		for (int i = 1; i <= 100; i++) {     
            for (int j = 1; j <= i >> 1 ; j++) {     
                if (j != 1 && i % j == 0) {
                    break;
                }
                if (j == i >> 1) {
                    System.out.println(i + "是素数");
                }
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值