博客
关于我
java 牛客:因子个数
阅读量:749 次
发布时间:2019-03-22

本文共 2746 字,大约阅读时间需要 9 分钟。

To solve this problem, we need to determine the number of factors for each given positive integer. The solution involves understanding the prime factorization of a number and using it to compute the total number of factors.

Approach

The approach can be broken down into the following steps:

  • Prime Factorization: Decompose the given number into its prime factors. For example, the number 36 can be decomposed into (2^2 \times 3^2).

  • Exponent Tracking: For each prime factor, determine its exponent in the factorization. For instance, in the case of 36, the exponent of 2 is 2, and the exponent of 3 is also 2.

  • Calculate Factors: The total number of factors of a number can be found by taking the product of each prime factor's exponent incremented by one. For example, using the prime factors of 36, the total number of factors is ((2+1) \times (2+1) = 9).

  • Efficient Looping: Use efficient looping techniques to iterate through potential factors, and stop early when further division isn't possible. This optimization prevents unnecessary computations.

  • Solution Code

    import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        while (scanner.hasNextInt()) {            int n = scanner.nextInt();            System.out.println(countFactors(n));        }    }    private static int countFactors(int n) {        if (n <= 1) {            return 1;        }        int factors = 1;        for (int i = 2; i * i <= n; ) {            if (n % i == 0) {                int exponent = 0;                while (n % i == 0) {                    exponent++;                    n /= i;                }                factors *= (exponent + 1);            } else {                i++;            }        }        if (n > 1) {            factors *= 2;        }        return factors;    }}

    Explanation

  • Reading Input: The code reads each integer from the standard input.
  • Handling Special Cases: If the input number is 1, it directly returns 1 as it is the only factor.
  • Prime Factorization Loop: The loop iterates from 2 up to the square root of the number. For each potential factor, it checks if it divides the number. If it does, it counts how many times it divides (the exponent) and then divides the number by this factor until it no longer can.
  • Updating Factors Count: The number of factors is updated by multiplying the product of each exponent incremented by one.
  • Remaining Prime Check: If after processing all factors up to the square root, the remaining number is greater than 1, it means it is a prime factor itself, contributing one more factor.
  • This approach efficiently computes the number of factors for each positive integer, ensuring correct and optimal results.

    转载地址:http://nvewk.baihongyu.com/

    你可能感兴趣的文章
    Openlayers实战:绘制图形,导出KML文件
    查看>>
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>