【$n$个数约数和】 约数之和
传送门
题意
\(n\)个数,求出他们的乘积的所有约数之和\(mod\; 10^{9}+7\)
数据范围
\(\begin{array}{l}1 \leq n \leq 100 \\ 1 \leq a_{i} \leq 2 * 10^{9}\end{array}\)
题解
同样求出每个质因数的指数,根据乘法分配律
-
\(t=(t\times p + 1) \; mod\; m\)
-
\(p_{b}\)
-
$t=1 $
-
\(t=p+1\)
-
\(t=p^{2} + p +1\)
-
\(\dots\)
-
\(t=p^{b} + p^{b-1} + \dots + p^{0}\)
-
Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
const int mod=1e9+7;
unordered_map<int,int>primes;
int main()
{
int n;cin>>n;
while(n--)
{
int x;cin>>x;
for(int i=2;i<=x/i;i++)
{
while(x%i==0)
{
x/=i;
primes[i]++;
}
}
if(x>1) primes[x]++;
}
ll ans=1;
for(auto it:primes)
{
ll res=1;
int p=it.first,mi=it.second;
ll t=1;
while(mi--) t=(t*p+1)%mod;
ans=(ans*t)%mod;
}
cout<<ans<<endl;
}

浙公网安备 33010602011771号