将一个输入的正整数n分解质因数

题目三: 将一个输入的正整数n分解质因数

1.核心代码

1.1 普通正整数(非质数)分解质因数

 for (int i = 2; i <=n; i++) {
      flag01=true;         
      for (int j =2; j <=i/2+1; j++) {
          if(i==2){
      //如果是2.直接跳出去,不用进行素数判断(从2开始的)
             break;
           }
           if(i%j==0){
              flag01=false;
              break;
            }
        }
        if(flag01){
           //当与质数相同时,代币着其本身就是素数
             if(i==n){
                System.out.println("该数"+n+"本身就是质数");
                System.out.println(n+"="+n);
                return;
                //不必执行后面的分解操作
              }else{
                    if(temp%i==0){
                        numbers[r++]=i;
                        temp=temp/i;
                        if(temp==1){
                            flag02=true;
                            break;
                         }
                         //每分解出一个质数因子,那原来的值也要更着分解出来
                     }
                     if(temp%i==0){
                         i--;
                     }
                //还是同一个可以整除的质数,所以寻找质数的范围不用往后移动一个
                  }
              }
 }

1.2 普通正整数(非质数)分解后输出

if(flag02){
    System.out.print(n+"=");
    for (int k = 0; k <r; k++) {
       //以是否为最后一个质因数为条件,分两种输出个数输出
       //不是时,后面要加*,若是,则后面无需加上
       if(k==r-1){
            System.out.print(numbers[k]);
       }else{
            System.out.print(numbers[k]+"*");
       }
      }
      //flag02是保证该数分解完所有的质因子后才执行输出操作
}

2.常见问题点分析

2.1 质数的判定依据是什么???

质数的判定条件为: 大于1的自然数;除了1和自身外没有其他的除数(两者缺一不可)

2.2 质数和素数的关系???

解答: 质数就是素数,就是两种不同的叫法而已。例如普通话和地方方言在讲述相同一件事物上叫法有差异,但是本质上说的还是同一件事物。

2.3 分解质因数的思路是什么?

前提:本文提到的正整数指的是非负整数

解答如下:

正整数为0或者为1时,输出该正整数无满足条件的质因数

正整数为质数时,丛2开始一起往后找质数

直到找到对应的质数,然后就输出"该质数=质数"的结果

正整数为普通数字时,建立一个临时变量temp存放正整数的值

a.每次从2开始往后找质数i,找到一个质数后,与temp相余,

b,若余数为0则该数i为质因数,拿数组a[r++]来存放(顺序)质因数,

c.此时temp的值应为分解出该质因数后的值即temp=temp/i;

c.然后temp与质因数相余,当值为0,那么i–(确保该质数下次还能用)

重复执行a、b、c、d操作,直至temp=1时,意味着分解完毕(跳出当前循环)

然后执行后面的打印操作

2.4 布尔类型变量flag、flag01、flag02的作用分别是什么?

解答如下:

​ flag的作用:确保输入的正整数是符合条件的

​ flag01的作用:确保质数是正确的

​ flag02的作用:确保正整数的所有质因数分解完毕后,执行打印操作

2.5 普通正整数分解质因数时,外层循环为啥为i<=n,内层循环为啥为j<=i/2+1,内层循环时2为啥直接跳出

解答如下:

​ 外层:确保质数寻找的范围足够大,不漏质数

​ 内层: 确保得到的质数是符合质数定义条件的

​ 2跳出原因:这个判断方法只适用于大于2的情况

​ 而2显然是质数,所以直接跳出循环就可.

3 运行截图

3.1 当输入的正整数n=0时

在这里插入图片描述

3.2 当输入的正整数n=1时

在这里插入图片描述

3.3 第一次输入有误且第二次输入正确(第一张图片为质数,第二张图片为普通数字)

在这里插入图片描述

在这里插入图片描述

3.4 第一次输入正确

在这里插入图片描述
在这里插入图片描述

4.源代码

import java.util.Scanner;

public class Factorization {
    public static void main(String[] args) {
        System.out.println("将一个输入的正整数n分解质因数。例如:输入 90,打印出 90=2*3*3*5。");
        System.out.println("注意说明:本题目的正整数定义是非负整数");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入正整数n的值");
        int n=scanner.nextInt();
        boolean flag=true;
        //定义一个布尔类型变量flag,确保输入的正整数是符合条件的

        //定义一个数组numbers来存放每次分解得到的质数
        while (true){
            if(n>=0){
                int[] numbers=new int[n/2];
                int r=0;
                //定义变量r来记录分解的质数的先后顺序
                flag=true;
                boolean flag01=true;
                //定义一个布尔类型flag01的数据---判定是否是质数(素数)
                boolean flag02=false;
                //定义一个布尔类型flag02的数据---判断质数是否分解成功
                if(n==0||n==1){
                    System.out.println("该正整数"+n+"没有质因数");
                    return;
                }
                int temp=n;
                for (int i = 2; i <=n; i++) {
                    flag01=true;
                    //先得到素数
                    for (int j =2; j <=i/2+1; j++) {
                        if(i==2){
                            //如果是2.直接跳出去,不用进行素数判断(从2开始的)
                            break;
                        }
                         if(i%j==0){
                             flag01=false;
                             break;
                         }
                    }
                    if(flag01){
                        //当与质数相同时,代币着其本身就是素数
                        if(i==n){
                            System.out.println("该数"+n+"本身就是质数");
                            System.out.println(n+"="+n);
                            return;
                            //不必执行后面的分解操作
                        }else{
                            if(temp%i==0){
                                numbers[r++]=i;
                                temp=temp/i;
                                if(temp==1){
                                    flag02=true;
                                    break;
                                }
                                //每分解出一个质数因子,那原来的值也要更着分解出来
                            }
                            if(temp%i==0){
                                i--;
                            }
                            //还是同一个可以整除的质数,所以寻找质数的范围不用往后移动一个
                        }
                    }
                }
                if(flag02){
                    System.out.print(n+"=");
                    for (int k = 0; k <r; k++) {
                        if(k==r-1){
                            System.out.print(numbers[k]);
                        }else{
                            System.out.print(numbers[k]+"*");
                        }
                    }
                }
            }else {
                flag=false;
                System.out.println("输入的正整数有误,请检查后重新输入");
                System.out.println("请再次输入正整数n的值");
                n=scanner.nextInt();
            }
            if(flag){
                break;
                //输入无误,就会正常跳出循环
            }
        }
    }
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 题目:对于给定的整数n,输出的素因数的乘式。 回答:这道题要求我们对于一个给定的正整数n,输出它的所有素因数的乘积式子。素因数是指只能被1和本身整除的因数,也就是质数。 例如,对于数字20,它的素因数有2和5,因为20可以写成2 * 2 * 5。因此,输出的结果应该是2 * 2 * 5。 ### 回答2: 素数是指除了1和自身外没有其他正整数能够整除的数,素因数则是指一个正整数的质因数中,所有的质数因子。对于给定的正整数n,我们需要找到它的所有素因数,然后将它们相乘,得出的结果就是n的素因数乘式。 求解一个数的所有素因数可以采用分解质因数的方法,即将该数不断地分解成两个因数,直到最后分解出的因数都是质数。假设要分解的正整数为n,那么我们可以从2开始,不断除以2,直到不能整除为止,然后再用3、5、7……依次去除n,如果能被整除,就继续除下去,直到最后剩下的数是一个质数,就是n的一个素因数。然后将这个素因数记录下来,再用n除以它,得到一个新的数m,不断重复上述过程,直到m也变成了一个质数,就是n的另一个素因数。最后将所有的素因数相乘,就得到了n的素因数乘式。 例如,对于正整数60,先用2去除,得到30,再用2去除,得到15,然后用3去除,得到5,5是一个质数,所以60的素因数中有因子5。然后将60除以5,得到12,使用2去除,得到6,再用2去除,得到3,3也是一个质数,所以60的素因数中还有因子3。最后,将所有的素因数相乘,即5×3×2×2=60,得到了60的素因数乘式。 需要注意的是,如果我们遍历了2~根号n之间的所有数,都没有找到n的素因数,那么说明n本身就是一个质数,因此它的素因数只有1个,就是它本身。 ### 回答3: 素数是指只有1和自身两个因数的正整数,例如2、3、5、7、11等。而素因数即为一个正整数素数因子,例如18=2*3*3,其素因数为2和3。 要输出正整数n的素因数乘积,首先需要对n进行质因数分解,即将n分解为若干个素数的乘积。可以使用试除法或分解质因数的方法进行分解。 以试除法为例,从2开始,不断去除n中的因数,直到无法再继续分解为止。具体步骤如下: 1. 将n复制一份,作为待分解的数字。 2. 从2开始,循环直到n小于等于1为止: (1)如果n能被当前的因数整除,则将这个因数记录下来,并将n除以这个因数继续循环; (2)否则,将因数加1,继续循环。 3. 将所有记录下来的因数相乘,即为n的素因数乘积。 例如,对于n=60,按照上述方法进行分解: 2是60的因数,将其记录下来,并将60除以2得30。 2是30的因数,将其记录下来,并将30除以2得15。 3是15的因数,将其记录下来,并将15除以3得5。 5是5的因数,将其记录下来,并将5除以5得1。 分解完毕,将记录下来的因数相乘得到2*2*3*5=60,即n的素因数乘积。 总结来说,求一个正整数n的素因数乘积的步骤为:质因数分解得到n的所有素因数,然后将它们相乘即可得到n的素因数乘积。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SSS4362

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

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

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

打赏作者

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

抵扣说明:

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

余额充值