【AcWing】871. 约数之和

分解完质因数后,直接代入求和公式。

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;

typedef long long LL;

const int mod=1e9+7;

int main(){
    int n;cin>>n;
    
    unordered_map<int,int> primes;//哈希表存储分解质因数的底数和指数
    
    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]++;//大于sqrt(x)的质因数
    }
    
    LL res=1;
    for(auto prime:primes){
        int p=prime.first,a=prime.second;//p是底数,a是指数
        LL t=1;
        while(a--){//乘指数次
            t=(t*p+1)%mod;//求每一个p的和
        }
        res=res*t%mod;//相乘
    }
    cout<<res<<endl;
    return 0;
}
相关推荐
逆境不可逃7 分钟前
LeetCode 热题 100 之 279. 完全平方数 322. 零钱兑换 139. 单词拆分 300. 最长递增子序列
java·算法·leetcode·职场和发展
美式请加冰10 分钟前
位运算符的介绍和使用
数据结构·算法
tankeven12 分钟前
HJ127 小红的双生串
c++·算法
Fcy64814 分钟前
与链表有关的算法题
数据结构·算法·链表
KerwinChou_CN16 分钟前
LangGraph 快速入门
服务器·网络·算法
雨落在了我的手上18 分钟前
C语言之数据结构初见篇(2):顺序表之通讯录的实现
数据结构
安之若素.re34 分钟前
918. 环形子数组的最大和
算法
阿阿阿阿里郎37 分钟前
ROS2快速入门--C++基础
开发语言·c++·算法
free-elcmacom39 分钟前
C++<x>new和delete
开发语言·c++·算法
lxh011341 分钟前
计算右侧小于当前元素的个数 题解
javascript·数据结构·算法