约数和定理:
对于一个大于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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。