题解:快速求一个数的约数个数
答案:45360
#include<iostream>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
const int N = 1e5;
vector<int> p;
bool isprime(int x)
{
for(int i = 2; i < sqrt(x); i++)
{
if(x % i == 0 ) return false;
}
return true;
}
void init()
{
for(int i = 2; i < N; i++)
{
if(isprime(i)) p.push_back(i);
}
}
int check(int x)
{
// cout << x << " ";
map<int,int> res;
for(int i = 0; i < p.size(); i++)
{
while(x % p[i] == 0)
{
x /= p[i];
res[p[i]]++;
}
}
int ans = 1;
for(map<int,int>::iterator it = res.begin(); it != res.end(); it++)
{
ans = ans * (it->second + 1);
}
// cout << ans << endl;
return ans;
}
int main()
{
init();//获取素数表
for(int i = 1; i < N; i++)
{
if(check(i) == 100)
{
cout << i << endl;
return 0;
}
}
}