• 【枚举】因子个数


    题目描述

    对于任意给定的一个正整数,计算其因数个数。

    输入样例:

    6

    输出样例:

    4

    说明:

    1、2、3、6都是6的因数。因此,输出4。

    输入

    输入正整数N。

    输出

    输出N的因子个数。

    样例输入

    6

    样例输出

    4

    数据范围限制

    1<=N<2^31

    提示

    1、2、3、6都是6的因数。因此,输出4。

    分析

    结合题面和样例发现,求得是数字的因子的个数。一种朴素的方法就是遍历所有1~N范围内的值,找出所有的x的因子,进行统计。
    若a是b的因子,应当满足b%a==0

    结构

    int cnt=0;
    for(int i=1;i<=n;i++){
      if(n%i==0) cnt++;
    }
    

    但是,结合数据范围分析,能够发现,范围过大,O(n)级别的算法会超时。此时就要想办法优化一下。
    结合我们以前做过的质数判断的题目,找因子的话实际上到 $ sqrt{n} $就够了,不需要完整的遍历到n。分析下复杂度O( $ sqrt{n} $).n是最大(2^{31}) ,开根号后大概是(10^{4} - 10^{5})之间,是在时间限制内的。
    对于根号的处理要注意 类似25这个数字,存在(5 imes5=25)的情况,因子只要计算一个,其他情况下,找到一个就算两个因子。
    另外要注意范围,根号后范围接近(10^5) ,平方后易超过int范围,故使用long long 类型进行处理。

    代码实现

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main(){
    	long long x,cnt=0,i;
    	cin>>x;
    	for(i=1;i*i<x;i++){
    		if(x%i==0) cnt+=2;
    	}
    	if(i*i==x) cnt++;
    	cout<<cnt;
    	return 0;
    }
    
    不积硅步,无以至千里。
  • 相关阅读:
    docker入门
    spring aop切面入门
    java 拉姆达 lamdba get
    Spring 3
    Spring 进阶二
    腾讯云 视频 点播 视频上传接口
    js 实时获取后台数据 Spring
    Spring 进阶一
    hibernate 第四天 重点查询的方式
    hibernate 第三天
  • 原文地址:https://www.cnblogs.com/wyloving/p/14854085.html
Copyright © 2020-2023  润新知