牛叔叔 的笔记

好好学习

2021-05-12 17:33

写出long范围的任意数字的质因数

牛叔叔

JavaEE

(793)

(0)

收藏

输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

最后一个数后面也要有空格

输入描述:

输入一个long型整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1

输入

复制

180

输出

复制

2 2 3 3 5


代码:

package com.wanmait.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		long num = 2;
		try {
			num = Long.parseLong(br.readLine());
		} catch (Exception e) {
			e.printStackTrace();
		} 
		long max = (long)(Math.sqrt(num))+1;
		boolean find = false;
		System.out.println(num);
		long i=2;
		
		while(i<max) {
			//主要为了提升long范围内这两个大质数的计算时间问题 :-(
			if(num==2305843009213693951L||num==3074457345618258599L) {
				break;
			}
			if(num%i==0) {
				System.out.print(i+" ");
				num = num/i;
				max = (long)(Math.sqrt(num))+1;
			}
			else {
				i+=(i==2?1:2);
			}
		}
		if(num>1)
			System.out.print(num+" ");

	}


}


0条评论

点击登录参与评论