质数因子 java_质数因子

本文介绍了一道华为机试题,要求输入一个正整数并按顺序输出其所有质数因子。通过编写Java代码,使用StringBuilder高效拼接质数因子,并通过isPrime方法判断是否为质数。程序从2开始遍历,直到找到质数因子或数值变为1,最终打印质数因子序列。
摘要由CSDN通过智能技术生成

都好多天没有写了,虽然感觉又好多的事情要做,却不知道该从哪里开始去做,想到了华为的机试题,然后,又过来做道。

题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格

详细描述:

函数接口说明:public String getResult(long ulDataInput)

输入参数:long ulDataInput:输入的正整数

返回值:String

题目分析:

首先,看到这道题目,我们可以想到的第一件事情就是,质数,如何判断质数,因为我们要找到一个数的因子,而这个因子必须是质数,所以,我们先写出判读一个数是不是质数,当然,判断质数是比较简单的,我考虑到,要用好几次,然后就抽出一个方法,专门用于判断是不是质数,返回是boolean类型的值,定义如下: static boolean isPrime(long num),我们设置为静态方法。接着,我们接受一个long类型的整数,然后去除以质数,如何选择质数,我们从p=2开始,判断p++是不是质数,如果是,则把num进行相处,直达不能整除为止,如果不是,则一直p++,知道P++为质数为止。第二步要做的就是,当最后的一个为质数,或者出完为一时,我们循环结束。

在这道题目当中,由于要输出的是字符串,我们自然想到String,可是我们要不停的网字符串后面拼接,显然用String类型效率较低,我们考虑使用StringBuilder类,借用append方法进行拼接,效率较高。使用这个的第二个问题是,append里面需要接收一个String类型的,可是我们得到的是int类型或者long类型,需要转化为Sting,我们使用的方法是Integer.toString()方法和String.valueOf()方法。

具体代码如下:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(http://System.in);

long num = scanner.nextLong();

boolean flag = true;

int p = 2;

StringBuilder out = new StringBuilder();

while(flag){

if (num%p==0) {

num = num/p;

out.append(Integer.toString(p)).append(" ");

}else {

p++;

if(!isPrime(p)){

p++;

}

}

if(isPrime(num)){

if (num == 1) {

flag = false;

}else {

out.append(String.valueOf(num)).append(" ");

flag = false;

}

}

}

System.out.print(out.toString());

scanner.close();

}

static boolean isPrime(long num){

for (int i = 2; i < Math.sqrt(num)+1; i++) {

if (num%i==0) {

return false;

}

}

return true;

}

}

,实验结果仿真如下:

知识点总结:

对于经常使用的方方,可以抽取出来,提高代码的重用性,对于工具类的方法,可是使用static静态方法;

static boolean isPrime(long num){

for (int i = 2; i < Math.sqrt(num)+1; i++) {

if (num%i==0) {

return false;

}

}

return true;

}

一个数的平方根: Math.sqrt();

使用字符串拼接,常用的类型为:StringBuilder;进行拼接用append(),将StringBuilder转化为String类型用.toString();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值