Java 算法 质因数2

题目描述

将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。

输入
输入描述:

一行,一个正整数

输入样例:

66

输出
输出描述:

两行,第一行为用空格分开的质因数

第二行为质因数的个数

输出样例:

2 3 11

3

HINT:时间限制:1.0s 内存限制:256.0MB

解题思路

首先算出m中的质数加入一个列表n中,然后再依次判断是否为质因数,是的加入到一个新的列表y中,并记录个数,最后输出就行了。注意:最后一个质因数有不加空格。

代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);     //输入函数
        int m=scanner.nextInt();                    //调用输入函数
        ArrayList<Integer> n=new ArrayList<>();     //记录m内的质数
        int x=0;                                    //判断是否为质数的标志
        ArrayList<Integer> y=new ArrayList<>();     //记录质因数
        int z=0;                                    //记录质因数个数
        for(int i=2;i<=m;i++){                      //计算m中的质数
            for (int j=2;j<i;j++){
                if (i%j==0){                        //除本身和1能被整除的数
                    x++;
                }
            }
            if (x==0){
                n.add(i);                           //添加到列表n中
            }
            x=0;                                    //重置标志
        }
        for (Integer integer : n) {                 //依次判断是否能整除
            if (m % integer == 0) {                 //若能
                y.add(integer);                     //加入到列表y
                z++;                                //个数加1
            }
        }
        for (int k1=0;k1<y.size();k1++){            //依次输出质因数
            if (k1==y.size()-1){                    //若为最后一个不加空格
                System.out.print(y.get(y.size()-1));
            }else {                                 //其余的加上空格
                System.out.print(y.get(k1)+" ");
            }
        }
        System.out.println();                       //换行
        System.out.println(z);                      //输出质因数个数
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

future furuer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值