* 题目: * 给定一个正整数 n 请问有多少个质数是 n 的约数 * <p> * 思路: * 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 * 任何一个数 它的质因子大于根号n的要么没有 要么只有一个 * 比如 1200 = 2^4 * 3^1 * 5^2 * 根据算术基本定理我们可以先求这个数的的质数 然后一直除尽这个数 判断这个质数当前的系数出现了几次 * 比如1200可以由质数 2 3 5构成 其中2为4方 3一方 五二方 public class 质因数个数 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextInt(); int ans = 0; // 我们不需要遍历到n。 任何一个数 它的质因子大于根号n的要么没有 要么只有一个 for (int i = 2; i <= n / i; i++) { if (n % i == 0) { // 说明i是个质数 [2,i-1]这个区间没有数是i的因数了 ans++; int cnt = 0; // while循环了几次 这个i的系数就有几次 while (n % i == 0) { cnt++; n /= i; // 一直除尽这个n } System.out.println(i + " " + cnt); } } // 如果除完之后 n>1 就说明还有一个 任何一个数 它的质因子大于根号n的要么没有 要么只有一个 if (n > 1) { System.out.println(n + " " + 1); ans++; } System.out.println(ans); } }
蓝桥杯 java 质因子个数
最新推荐文章于 2024-07-22 14:15:06 发布