约数之和

原题链接:https://www.acwing.com/problem/content/description/873/

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

输入格式

第一行包含整数 n

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

输出格式

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

 

算法思路:

任意一个数x,都可以唯一分解分解为如下形式:x = p1kp2kp3k3...pnkn

其中p1, p2, p3, pn都为质数,那么x的所有约数之和可以表示为(1+p1+p12+...+p1k1)(1+p2+p22+...+p2k2)...(1+pn+pn2+...+pnkn)

 

代码实现:

复制代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>

using namespace std;
typedef long long LL;

const int MOD = 1e9 + 7;

unordered_map<int, int> primes;

int main()
{
    int n;
    LL res = 1;
    cin >> n;
    while(n--)
    {
        int x;
        cin >> x;
        for(int i=2;i<=x/i;i++)
        {
            while(x % i == 0)
            {
                x = x / i;
                primes[i]++;
            }
        }
        if(x > 1) primes[x]++;
    }
    
    for(auto& [k, v]: primes)
    {
        LL s = 1;
        while(v--)
        {
            s = (s * k + 1) % MOD;
        }
        res = (res * s) % MOD;
    }
    
    cout << res << endl;
    
    return 0;
}
复制代码

 

posted @   krystalZ2021  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示