题目三: 将一个输入的正整数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;//输入无误,就会正常跳出循环}}}
}

将一个输入的正整数n分解质因数相关推荐

  1. 正整数如何分解质因数(C++)

    思路 平常数学题求质因数,一般都是先除以2,然后再根据结果,决定是否继续除以2,3,5,7,等其他的质数.思路可以分解成以下几步 第一步 用N除以i(i为最小的质数,也就是2),会有三种可能的情况. ...

  2. python练习笔记——分解质因数

    分解质因数:输入一个正整数,分解质因数: 如输入: 90   则打印: 90 = 2 * 3 * 3 * 5 get_str = input("请输入一个100以内的正整数,以分解质因数:& ...

  3. 2122 分解质因数

    题目描述 请你帮小瓜将正整数n分解质因数,并从小到大输出所有的质因数(如果一个质因数出现多次,则输出多次). 输入 一行一个正整数n,保证1<=n<=10^8. 输出 若干行,每行表示n的 ...

  4. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    代码: package com.liron.p1;import java.util.Scanner;/**将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.*/ public cla ...

  5. python 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    # 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.n = int(input('请输入需要分解的正数:')) # 创建一个列表用来存放遍历出来的因数 lt = [] # 给n换个 ...

  6. 【15】将一个正整数分解质因数 例如:输入90,打印出90=2*3*3*5

    关于因素分解的问题 首先需要考虑的是如果随便输入一个数,那么该怎么怎么分解呢? 最主要的是这个部分: for (i = 2; i <= n; i++)     {             whi ...

  7. 将一个正整数分解质因数。例如:输入90,打印出90=233*5

    对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可. (2)但n能被k整除,则 ...

  8. Python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    def SlowSnail(n):while n != 1: # 循环保证递归for index in range(2, n + 1):if n % index == 0:n //= index # ...

  9. python将一个正整数分解质因数

    将一个正整数分解质因数 1. 解法一 2. 解法二 3. 解法三 4. 解法四 例如输入90,输出:90=2*3*3*5 对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成: (1)如果 ...

最新文章

  1. 清华大学施路平:发展人工通用智能最好的时机到了!
  2. MyEclipse 10 之下Web Service 的创建和实现
  3. oracle中闪回和回滚,oracle闪回操作详解
  4. 极客青年说,北京沙龙
  5. LeetCode 541. 反转字符串 II
  6. 判断mac地址单播还是组播(shell脚本)
  7. 资源放送丨《Oracle 19c x86下移经验分享》PPT视频
  8. BZOJ 1303: [CQOI2009]中位数图【前缀和】
  9. XML的常用领域及其优势
  10. 关于特效表现与资源优化
  11. html文件嵌入到reportlab,Django Reportlab使用HTML
  12. Shapley Values
  13. 模型--vgg16.npy下载
  14. 用一段CSS代码找回属于童年的哆啦A梦欢度六一附源码在线展示
  15. 农村信用社招聘计算机类进去干啥,2008年山东农村信用社招聘考试计算机类的范围有知道的吗?...
  16. 学习SEO就到SEOWHY,SEO十万个为什…
  17. Python 取代了 Excel 在银行业务中的地位?
  18. VS2017 下QT工程不能生成moc文件的解决方法
  19. 从卫星影像上追踪腾格里沙漠排污事件
  20. C++zlib库实现的GZIP压缩解压缩工具类【多图警告^_^】

热门文章

  1. 在envi做随机森林_基于模糊孤立森林算法的多维数据异常检测方法
  2. 计算机网络 IPv4地址 最详的详解!!!
  3. 使用StretchBlt函数导致位图失真的解决方案
  4. 利用R语言通过holtwinters模型进行预测
  5. 使用vivado2019.2和petalinux 2019.2制作带无线wifi的ultra96v2的BSP软件包
  6. SpringMVC项目添加日志
  7. 互联网成功者的业务模式不能学,要学就学失败者的- -
  8. linux 寄存器ss,段寄存器详解
  9. Win7网络连接正常但不能上网解决方案
  10. 验证网站是否可信有哪些方法?