当前位置: 首页 > web >正文

算法笔记·数学·约数之和

题目:(来源:AcWing)

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

1≤n≤100,
1≤ai≤2×1e9

输入样例:
3
2
6
8
输出样例:
252

思路:

1.一个数可以拆解为多个质数的n次方的积,即n=p_1^{x_1}*p_2^{x_2} *...p_i^{x_i},例如8=2^3

2.n的约数即为p_1{p_2}...{p_n}的x次方组合(x\epsilon[0,x_i])。

3.于是有,约数之和等于(1+p_1+p_1^2+...+p_1^{x_1})*(1+p_2+p_2^2+...+p_2^{x_2})*...*(1+p_i+p_i^2+...+p_i^{x_i})

4.求(1+p_i+p_i^2+...+p_i^{x_i})可以用迭代法,sum_{x_{i}}=sum_{x_{i-1}}*p_i+1%mod,这样可以避免超出int范围。

代码:

#include<iostream>
#include<unordered_map>
using namespace std;
const int mod = 1e9+7;int n;
unordered_map<int ,int> m;void check(int x)
{int t = x;for(int i = 2;i <= t/i ;i++){while(t%i == 0){t/=i;m[i]++;}}if(t > 1) m[t]++;}// int fun1(int a,int b)
// {
//     if(b==0) return 1;
//     return a*fun1(a,b-1)%mod;
// }int main()
{cin>>n;while(n--){int x;scanf("%d",&x);check(x);}long long res = 1;for(auto it = m.begin();it!=m.end();it++){int a = it->first,b=it->second;long long t = 1;while(b--) t = (t*a+1)%mod;res= res * t % mod;}cout <<res;return 0;
}

http://www.xdnf.cn/news/8754.html

相关文章:

  • PCIE 4.0 vs PCIE 5.0固态硬盘——区别、科普与选购场景全解析
  • yolov11使用记录(训练自己的数据集)
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • 代码混淆技术的还原案例
  • LangChain
  • [软件测试_5] 设计用例 | 等价法 | 判定表法 | 正交法(allpairs.exe)
  • 【人工智能】AI的炼金术:大模型训练的秘密配方
  • C语言-枚举
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.concat():轴向拼接
  • wan2.1代码笔记
  • 简说IMM
  • AI 理论- 模型优化 - 注意力机制
  • 整平机技术进阶:从原理到实战的深度解析
  • MD5加密(Java)
  • 如何快速解决 java maven项目中jar冲突的问题
  • CAU人工智能class6 ResNet
  • 业务设计篇隐私合规检测URL 重定向资源拒绝服务配合项目
  • leetcode2466,爬楼梯变体,取模注意
  • 【第四篇】 SpringBoot整合第三方技术
  • 板凳-------Mysql cookbook学习 (六)
  • day25JS- es5面向对象、Proxy代理对象
  • ARM笔记-ARM指令集
  • PG Pebbles 靶机复现
  • 【C++】移动窗口
  • Java中使用Stream API优化for循环
  • [NOIP 2003 普及组] 麦森数 Java
  • AI要掌握的知识
  • Python_day35 模型可视化与推理
  • Java 内存模型(JMM)深度解析:理解多线程内存可见性问题
  • 网页 CSS美化2(详解)