求正整数 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

题目描述

求正整数 nnn 的所有正因数的个数,qqq 次询问。

输入描述:

第一行一个正整数 q (1≤q≤105)q\ (1\leq q\leq 10^5)q (1q105) 。
第二行到第 q+1q+1q+1 行,每行一个正整数 n (1≤n≤107)n\ (1\leq n\leq 10^7)n (1n107)。

输出描述:

对于每个询问,输出一个正整数。两个答案间用空行分隔。
示例1

输入

复制
5
1
2
3
4
5

输出

复制
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;
    }
}

 

 

posted @ 2021-10-30 15:57  fishcanfly  阅读(296)  评论(0)    收藏  举报
//雪花飘落效果