首页 > 代码库 > 中国MOOC_零基础学Java语言_第7周 函数_1分解质因数

中国MOOC_零基础学Java语言_第7周 函数_1分解质因数

 

第7周编程题

返回
 

第7周编程题

依照学术诚信条款,我保证此作业是本人独立完成的。

温馨提示:

1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

1
分解质因数(5分)

题目内容:

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

 

输入格式:

一个整数,范围在[2,100000]内。

 

输出格式:

形如:

n=axbxcxd

n=n

所有的符号之间都没有空格,x是小写字母x。

 

输入样例:

18

 

输出样例:

18=2x3x3

 

时间限制:500ms内存限制:32000kb
 
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int count = 0;// 计数器
		int n = 0;// 输入
		int nBeifen;// 备份n
		int prime = 2;// 素数,第一个素数是2

		n = sc.nextInt();

		if (prime(n)) {
			System.out.printf("%d=%d\n", n, n);// n=n
		} else {
			System.out.printf("%d=", n);// n=axbxcxd

			nBeifen = n;

			while (nBeifen > 1) {
				if (nBeifen % prime == 0) {
					if (count > 0) {
						System.out.printf("x");
					}
					nBeifen = nBeifen / prime;
					System.out.printf("%d", prime);
					count++;
				} else {
					prime++;
					prime = nextPrime(prime);// 下一个素数
				}
			}

			System.out.printf("\n");
		}
	}

	public static boolean prime(int n) {// 判断是否素数
		boolean isPrime = true;// 默认是素数

		if (n == 1 || (n % 2 == 0 && n != 2)) {// 判断1或者除了2的偶数
			isPrime = false;
		} else if (n == 2) {// 判断2
			isPrime = true;
		} else {// 判断其他
			for (int i = 3; i < Math.sqrt(n); i += 2) {
				if (n % i == 0) {
					isPrime = false;
					break;
				}
			}
		}

		return isPrime;
	}

	public static int nextPrime(int n) {// 下一个素数
		while (true) {
			if (prime(n)) {
				return n;
			} else {
				n++;
			}
		}
	}
}

 

中国MOOC_零基础学Java语言_第7周 函数_1分解质因数