zoukankan      html  css  js  c++  java
  • 【枚举】因子个数

    题目描述

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

    输入样例:

    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;
    }
    
    不积硅步,无以至千里。
  • 相关阅读:
    js window对象属相和方法相关整理资料
    js中把字符串转换成number格式方法
    oracle中CAST函数使用简介【转】
    Oracle使用SQL语句修改字段类型
    @GeneratorValue与@GenericGenerator注解使用心得
    @Column 注解详情
    Spring中的注入方式 和使用的注解 详解
    maven教程
    wxpyhon 对话框
    wxpython 按钮等事件的触发
  • 原文地址:https://www.cnblogs.com/wyloving/p/14854085.html
Copyright © 2011-2022 走看看