AcWing 871. 约数之和 (式除法因式分解)

tech2023-02-04  85

约数之和

给定n个正整数ai,请你输出这些数的乘积的约数之和,答案对109+7取模。

输入格式 第一行包含整数n。

接下来n行,每行包含一个整数ai。

输出格式 输出一个整数,表示所给正整数的乘积的约数之和,答案需对109+7取模。

数据范围 1≤n≤100, 1≤ai≤2∗1e9

解题思路:约数之和等于各个质因子从零到幂指数之和的乘积;

Code:

#include<iostream> #include<unordered_map> using namespace std; typedef long long ll; 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 t=1; int x=it.first; int y=it.second; while(y--) t=(t*x+1)%mod; //每个 质因子 次幂之和 ans=ans*t%mod; } cout<<ans<<endl; return 0; }
最新回复(0)