博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正质因数分解
阅读量:5309 次
发布时间:2019-06-14

本文共 2720 字,大约阅读时间需要 9 分钟。

题目:将一个正质因数分解。例如:90=2*3*3*5.

* 程序分析:对n进行质因数分解,应先找到一个最小的质数k,然后按下述步骤:
1.如果这个质数恰等于n,则说明分解质因数已经结束,打印出即可
2.如果n<>k,但n能被k整除,则打印出k的值,并利用n除以k的商,作为新的正整数,重复执行第一步
3.如果n不能被k整除,则用k+1作为k的值,重复执行第一步


按照上面程序分析思想实现

package com.math.forth;import java.util.Scanner;/** * 将一个正质因数分解。例如:90=2*3*3*5. * 程序分析:对n进行质因数分解,应先找到一个最小的质数k,然后按下述步骤: * 1.如果这个质数恰等于n,则说明分解质因数已经结束,打印出即可 * 2.如果n<>k,但n能被k整除,则打印出k的值,并利用n除以k的商,作为新的正整数,重复执行第一步 * 3.如果n不能被k整除,则用k+1作为k的值,重复执行第一步 * @author wql * */public class Method04 {
public static void main(String[] args) { System.out.print("请输入一个质数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); System.out.print(n+"="); method(n); } public static void method(int n){ boolean flag=false; //判断该数有没有质因数标志 for(int k=2;k
k,但n能被k整除,则打印出k的值 System.out.print(k+"*"); flag=true; n=n/k; }else { break; } } } //如果n不能被k整除,则打印出n的值 if(flag){ System.out.println(n); }else{ System.out.println("1*"+n); } }}

看到这个题目,我的想法是递归调用,实现如下

package com.math.forth;import java.util.Scanner;/** * @author wql * */public class Method04 {
public static void main(String[] args) { System.out.print("请输入一个质数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); System.out.print(n+"="); method(n); } public static void method(int num){ boolean flag=false; for(int i=2;i<=num/2;i++){ if(num%i==0) { System.out.print(i+"*"); int x=num/i; method(x);//去递归调用,但递归调用结束,for循环给终止 flag=true; break; } } if(!flag){ System.out.print("1*"+num); } } }

下面相对繁琐的方法,可能比较好理解

package com.math.forth;import java.util.Scanner;/** * @author wql * */public class Method04 {
public static void main(String[] args) { System.out.print("请输入一个质数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); System.out.print(n+"="); method2(n); } public static void method(int num){ int x=0; for(int i=2;i<=num/2;i++){ if(num%i==0) { System.out.print(i+"*"); x=num/i; break; } } if(x==0){
//如果此数是个素数,只能被1和其自身整除 System.out.print("1*"+num); }else{ isNum(x); } } /** * 判断是不是质数 * @param x */ public static void isNum(int x) { boolean flag=false; for(int i=2;i

转载于:https://www.cnblogs.com/wangqilong/p/9417541.html

你可能感兴趣的文章
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
9款免费的Windows远程协助软件
查看>>
Maven(八) Maven项目和testng结合应用
查看>>
iOS 的 set.get.构造方法
查看>>
无法根据中文查找
查看>>
文件编码,文件或文件名编码格式转换(转)
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
redis的hash与string区别
查看>>
转载 python多重继承C3算法
查看>>
初用Ajax
查看>>
zabbix 2.2.20 安装详解(Centos6.9)
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
SQL_Server_2008完全学习之第十章触发器
查看>>
git安装和简单配置
查看>>
C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)...
查看>>
面向对象:反射,双下方法
查看>>
利用matplotlib绘画出二特征的散点图
查看>>
RabiitMq
查看>>