约数之和---模板题

给定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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值