题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
解题思路:
本题主要是将一个输入的数转换成若干项质数乘积的表达式,这里有两个函数,一个是判断num是否为质数,一个是求大于或等于offset的下一个质数。因为我们必须保证输出的一定是质数,所以每次需要判断输入的num是否为质数,如果是质数,可以直接输出;如果不是质数,就要首先判断能否被最小的质数整除,如果能整除,就更新num的值为num / first进入下次循环;如果不能整除,就不能更新num的值,需要将质数扩大,但是又不能太大,我这里取得就是first下一个质数。最终循环终止条件就是num=1,表示num已经完全被质数整除了。
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); long num = scan.nextLong(); int first = 2; while (num != 1) { if (isZhiShu(num)) { System.out.print(num + " "); break; } if (num % first == 0) { System.out.print(first + " "); num = num / first; } else { first = nextZhiShu(first + 1); } } // System.out.println(first + "的下一个质数:" + nextZhiShu(first+1)); // System.out.println(num + "是质数吗?" + isZhiShu((int)num)); } private static int nextZhiShu(int offset) { while (!isZhiShu(offset)) { offset++; } return offset; } public static boolean isZhiShu(long num) { for (int i = 2; i <= Math.pow(num,0.5); i++) { if (num % i == 0) return false; } return true; } }