题解 | #约数的个数#
约数的个数
http://www.nowcoder.com/practice/04c8a5ea209d41798d23b59f053fa4d6
#include<iostream> #include<cmath> #include<map> using namespace std; map<long long, int> myMap; long long numYueshu(long long n){ long long answer = 0; for(int i = 1; i < sqrt(n); i++){ if(n%i==0){ answer++; answer++; } } if(sqrt(n)==int(sqrt(n))) answer++; return answer; } int main(){ long long n; int N; cin>>N; for(int i = 0; i < N; i++){ cin>>n; cout<<numYueshu(n)<<endl; } return 0; }
直接暴力会超时,注意到每个数字如果有小于sqrt(n)的约数则必有一个大于sqrt(n)的约数,最后再判断sqrt(n)能否整除,能整除则+1。