#include<bits/stdc++.h>//求约数和
#include<map>
using namespace std;
const int mod=1e9+10;
typedef long long ll;
int main(){
int n;
cin>>n;
unordered_map<int,int>primes;
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 res=1;
for(auto prime:primes){//思路:p是底数,a是指数
int p=prime.first,a=prime.second;//底数各种不同指数的相加,再都相乘起来就可以构成不同的因数
ll t=1; //例如: (1+2+3)*(4+5)就可以构成4,5,8,10,12,15(语言叙述能力太差)
while(a--) t=(t*p+1)%mod;//分解出各个底数的相乘的结果就为所有因数的和
res=res*t%mod;
}
cout<<res;
return 0;
}
#include<bits/stdc++.h>//求约数个数和
#include<map>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
int main(){
int n;
cin>>n;
unordered_map<int,int>primes;//用unordered_map更快
while(n--){
int x;
cin>>x;
for(int i=2;i<=x/i;++i){//分解质因数的板子
while(x%i==0){
x/=i;
primes[i]++;//指数增加
}
}
}
ll res=1;
for(auto prime:primes){
res=res*(prime.second+1)%mod;//思路:有个数它可以由p1^n1 * p2^n2 * p3^n3构成
} //那么其因数可以为p1^(n1-x1) * p2^(n2-x2) * p3^(n3-x3) <其中x为比n小于等的数>
//那么其约数个数和就可以表示为(n1+1) * (n2+1) * (n3+1) <0也在其中>
cout<<res<<endl;
return 0;
}
标签:约数,include,int,ll,long,板子,2.0,mod
From: https://blog.csdn.net/2302_80928106/article/details/137355306