试除法求约数
vector<int> get_divisors(int 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;
}
约数个数
unordered_map<int,int> primes;
while(n--)
{
cin>>x;
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
primes[i]++;
}
}
if(x > 1) primes[x]++;
}
for(auto t:primes) res = (res * (t.second+1))%mod;
约数之和
while(n--)
{
cin>>x;
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
primes[i]++;
}
}
if(x > 1) primes[x]++;
}
for(auto t:primes)
{
long long k = 1;
int p=t.first,a=t.second;
while(a--) k = (k * p + 1) % mod;
res = (res * k) % mod;
}
最大公约数
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}