求正整数 n 的所有正因数的个数,qq 次询问。
https://ac.nowcoder.com/acm/contest/22769/A
链接:https://ac.nowcoder.com/acm/contest/22769/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
求正整数 nnn 的所有正因数的个数,qqq 次询问。
输入描述:
第一行一个正整数 q (1≤q≤105)q\ (1\leq q\leq 10^5)q (1≤q≤105) 。
第二行到第 q+1q+1q+1 行,每行一个正整数 n (1≤n≤107)n\ (1\leq n\leq 10^7)n (1≤n≤107)。
输出描述:
对于每个询问,输出一个正整数。两个答案间用空行分隔。
示例1
输出
复制1 2 2 3 2
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { // Scanner scanner = new Scanner(System.in); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int q = Integer.valueOf(br.readLine()); while (q > 0) { // int n = scanner.nextInt(); int n = Integer.valueOf(br.readLine()); System.out.println(solve(n)); q--; } br.close(); } public static long solve(int n) { int p = 2; List<Integer> list = new ArrayList<>(); while (p <= (int) Math.sqrt(n)) {//注意上确界 int ans = 0; while (n % p == 0) { n = n / p; ans++; } list.add(ans); p++; } if(n!=1){ list.add(1);} long ans = 1L; for (int i = 0, size = list.size(); i < size; i++) { ans = ans * (list.get(i)+1); } return ans; } }


浙公网安备 33010602011771号