合数X = p0^a0 * p1^a1 * p2^a2 .... pi^ai
pi为X的质因数,ai是pi的次方 即将合数X分解质因数的过程
1.合数X中约数的个数=(a0+1) * (a1+1) * (a2+1) ..... (ai + 1)
2.合数X中约数之和 = (p0^0+p0^1+p0^2+....+p0^a0) * (p1^0+p1^1+p1^2+.....+p1^a1) * (p2^0+p2^1+p2^2+....+p2^a2) * .... * (pi^0+pi^1+pi^2+``+pi^ai)
C++ 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <unordered_map>
typedef long long LL;
using namespace std;
const int mod = 1e9 + 7;
int n, num;
int main()
{
cin >> n;
unordered_map<int,int> primes;
while(n--)
{
cin >> num;
//i <= num / i就行,不可能存在两个大于sqrt(num)的质因子
for(int i = 2; i <= num / i; i++ )
{
while(num % i == 0)
{
num /= i;
primes[i] ++;
}
}
//最后num!=1,那么num此时为一个质数
if(num > 1) primes[num] ++;
}
LL ans = 1;
for(auto p : primes)
{
LL a = p.first, b = p.second;
LL t = 1;
while(b--)
t = (t * a + 1) % mod;
ans = ans * t % mod;
}
cout << ans <<endl;
}