第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 } 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(" "); } } 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++; } } } }