题目
题解思路
由上一篇的约数定理 可以知道 只需要算出每一项的质因数的指数 再加起来 然后用 约数之和公式就能计算出了 。
这里有一个 秦九韶算法计算多项式 是解决这种等比数列求和的另一种方法
只需一个while循环
这个好像在多项式乘法中用过
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
#include <unordered_map>
using namespace std;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7 ;
int main ()
{
ios::sync_with_stdio(false);
int T ;
cin>> T ;
unordered_map<int, int> p;
while(T--)
{
long long n;
cin>>n;
for (long long i = 2 ; i * i <= n ; i++ )
{
if ( n % i == 0 )
{
while( n%i == 0 )
{
n/=i;
p[i]++;
}
}
}
if ( n > 1 )
p[n]++;
}
long long ans = 1 ;
for ( auto i : p )
{
int t1 = i.first , t2 = i.second ;
long long x = 1 ;
while( t2 -- )
x = ( x*t1 + 1 )%mod;
ans = x*ans%mod;
}
cout<<ans<<"\n";
return 0 ;
}