题解 | 约数的个数

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++){
            long long x;
            cin>>x;
            int ans=0;
            for(int j=1;j<=sqrt(x);j++){
                if(x%j==0)ans+=2;
            }

            if((int)sqrt(x)*(int)sqrt(x)==x)ans--;
            cout<<ans<<endl;
        }
    }
}

直接暴力会超时,尝试分割,因为如果存在一个因数,那么ab=x的情况下,就一定有一个b,那么什么情况下,这俩相等呢?根号,那么自然就想到采用这种分割方式,直接加2即可,然后注意如果中间位置出现了相同,说明加多了,可以减一,当然也可以修改逻辑为<,这样下面就是加一,可能有同学对为什么强制转换有问题,这是因为float是得不到int的相等的,即使没有后续,所以需要转一下

全部评论
本题难度在于数学思路
点赞 回复 分享
发布于 01-11 15:19 河南

相关推荐

大厂的边缘业务去了也没啥用,也得不到任何成长,尤其是审核、中台这种价值产出不清楚的,别被大厂光环蒙蔽了双眼,如果你找实习工作,优先找"离钱近的业务",钱多的业务福利年终奖啥的都不会差的
陈100:呵呵。 你在大厂工作2年,后面准备好,可以随便跳很多公司。 去小厂,现在拿到所谓多的钱,有啥用啊,未来没有了。 而且应届生,工作没几年的,也不是赚钱的时间。
点赞 评论 收藏
分享
爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 20:30
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务