https://www.acwing.com/problem/content/description/873/
这道题我觉得非常需要写一篇博文了,这道题尽管看起来像一个简简单单的求约数之和问题,其实有一个式子我们确实不知道,数论确实包含了我们不知道的定理。
比如说
p是质因数,a是质因数的个数,把他写成了一个等比数列,可能这样是正确的吧。
总之,证明过程我可能不会,这个公式,我们需要记住他。
然后理解了公式,代码其实真的不难,除了模运算有点东西,其他的都很简单。
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
int n;
int main(void)
{
scanf("%d",&n);
unordered_map<int,int> hash;
while(n--)
{
int t;
scanf("%d",&t);
int l=t;
for(int i=2;i<=t/i;i++)
{
while(l%i==0)
{
hash[i]++;
l/=i;
}
}
if(l>1)
hash[l]++;
}
long long ans=1;
for(auto p:hash)
{
long long res=1;
for(int i=1;i<=p.second;i++)
{
res=res*p.first+1;
res%=mod;
}
ans=ans*res%mod;
}
cout<<ans;
}