试除法求约数的个数
试除法模版
vector<int>get_divisors(LL n)
{
vector<int>res;
for(int i = 1;i <= n / i;i ++)
if(n % i == 0)
{
res.push_back(i);
if(i != n / i) res.push_back(n / i);
}
sort(res.begin(), res.end());
return res;
}
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
//试除法
using namespace std;
typedef long long LL;
int n;
vector<int>get_divisors(LL n)
{
vector<int>res;
for(int i = 1;i <= n / i;i ++)
if(n % i == 0)
{
res.push_back(i);
if(i != n / i) res.push_back(n / i);
}
return res;
}
int main()
{
scanf("%d", &n);
while(n --)
{
LL x;
scanf("%lld", &x);
auto res = get_divisors(x);
printf("%d\n", res.size());
}
return 0;
}
(暴力枚举)
STL了
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N = 1010;
int n;
LL g[N];
int main()
{
scanf("%d", &n);
for(int i = 0; i < n;i ++)
scanf("%lld", &g[i]);
int cnt;
for(int i = 0;i < n;i ++)
{
cnt = 0;
int j = 1;
while(j <= g[i])
{
if(g[i] % j == 0)
{
cnt ++;
}
j ++;
}
printf("%d\n", cnt);
}
return 0;
}