约数之和模板题

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

输入格式

第一行包含整数n。

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

输出格式

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

数据范围

1n1001≤n≤100,
1ai21091≤ai≤2∗109

输入样例:

3
2
6
8

输出样例:

252


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;

int T,x;
map<ll,ll> mp;
void fun(int x){ //计算质因数的个数
    for(int i =2;i<=x/i;i++){
      while(x%i == 0) x/=i,mp[i]++; } if(x>1) mp[x]++; } ll ksm(ll a,ll b){ //快速幂 ll res = 1; while(b){ if(b&1) res = res*a%mod; a = a*a%mod; b>>=1; } return res; } int main(){ cin>>T; while(T--){ cin>>x; fun(x); } ll res = 1; for(auto m: mp){ //基于二项式定义 ll cur = 0; for(int i = 0;i<=m.second;i++){ cur = (cur+ksm(m.first,i))%mod; } res = res*cur%mod; } cout<<res<<endl; return 0; }

原文地址:https://www.cnblogs.com/bigbrox/p/11336636.html