ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

约数之和

2021-04-07 02:32:46  阅读:312  来源: 互联网

标签:约数 p2 p1 int pk include


约数和定理:

对于一个大于1正整数n可以分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,则由约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak) 例题:

 

 

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <unordered_map>
 6 
 7 using namespace std;
 8 
 9 typedef long long LL;
10 typedef unordered_map<int, int> unmap;
11 
12 const int mod = 1e9 + 7;
13 
14 unmap prime;
15 
16 int main() 
17 {
18     int n;
19     scanf("%d", &n);
20     while (n -- ) 
21     {
22         int x;
23         scanf("%d", &x);
24 
25         for (int i = 2; i <= x / i; i ++ )
26             while (x % i == 0) 
27             {
28                 x /= i;
29                 prime[i] ++ ;
30             }
31 
32         if (x > 1) prime[x] ++ ;
33     }
34 
35     LL res = 1;
36 
37     for (unmap::iterator it = prime.begin(); it != prime.end(); it ++ ) 
38     {
39         LL sum = 1;
40         LL cnt = 1;
41         for (int i = 1; i <= it -> second; i ++ )
42         {
43             cnt = cnt * it -> first % mod;
44             sum = (sum + cnt) % mod;
45         }
46         res = res * sum % mod;
47     }
48 
49     printf("%lld", res);
50 
51     return 0;
52 }

 

标签:约数,p2,p1,int,pk,include
来源: https://www.cnblogs.com/wanshu/p/14556695.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有