【牛客刷题】因子个数。一个正整数可以分解成一个或多个数组的积。例如36=2*2*3*3,即包含2和3两个因子。NowCoder希望你开发一个程序输出每个正整数的因子个数。

        试题链接:因子个数__牛客网

        先贴代码:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            //输入n:
            int n = scanner.nextInt();

            int count = 0; //count记录因子的个数
            for (int i = 2; i < Math.sqrt(n); i++) {
                if (n % i == 0){ //如果n mod i == 0 那么i为n的因子
                    //如果n还能继续被 i 整除,那么继续除以 i 直到 i 不是 n 的因子为止
                    while (n % i == 0){ 
                        n /= i;
                    }
                    count++; //记录下n的因子i
                }
            }
            if (n != 1){
                count++;
            }
            System.out.println(count);
        }
    }
}

        解体思路:

        要求输出一个数n的所有因子,首先因子肯定是不能为1和它本身的。并且重复的因子只算一个。那么我们从最小因子2开始到最大因子n的平方根结束,依次遍历这个区间的每个数:

        当我们遍历到i,并且i可以被n整除时,那么i就是n的因子,此时进入if语句,把count+1。但是题目中又提到,相同的因子只能计数一次,因此我们需要继续循环除以这个因子i,直到不能整除i为止,表示此时i已经不是n的因子了:

        到这一步为止就可以继续遍历因子集合了,找到下一个n的因子,再重复上述操作,直到n已经不能被任何数整除时,for循环结束。

        当循环结束后,还需要判断一下n现在的值,当n现在不为1时,此时的n也是一个因子,也需要将count+1;因为在开头我们就说过计算因子的时候是不计数1和它本身的:

猜你喜欢

转载自blog.csdn.net/weixin_56960711/article/details/125113716
今日推荐