题解 | 约数的个数
#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的相等的,即使没有后续,所以需要转一下