Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 9901).

Input

The only line contains the two natural numbers A and B, (0 <= A,B <= 50000000)separated by blanks.

Output

The only line of the output will contain S modulo 9901.

Sample Input

  1. 2 3

Sample Output

  1. 15

Hint

2^3 = 8. 
The natural divisors of 8 are: 1,2,4,8. Their sum is 15. 
15 modulo 9901 is 15 (that should be output). 
 
题意:输入A,B  求A^B的所有因子之和
 
思路: 首先求一个数的所有因子之和,我们就可以使用我们的唯一分解定理
(1+p1^1+p1^2+p1^3...p1^n)*(1+p2^1.....p2^n)*...*(1+pn^1+....+pn^n)
然后每一个括号里面我们可以用一个等比数列公式来求得 
a1*(1-q^n)/(1-q)    
不过既然我们要用除法,那我们为了保证精确度肯定要求逆元,还有求q^n的时候,因为范围比较大,你就要使用快速幂求得
这也说了,这是一个数的所有因子之和,
题目所求得是   A^B的所有因子之和,所以你要想想,因为数据比较大所以我们不能直接求解,这样取模容易丢失精度
运用算术基本原理  4^6=(2^2) ^6=2^12
所以可以直接算出素因子时直接个数乘以幂数即可
 
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<vector>
  6. #define mod 9901
  7. #define MAX 1001
  8. using namespace std;
  9. typedef long long ll;
  10. int cnt;
  11. vector<ll> prime;
  12. vector<ll> times;
  13. ll qpow(ll a,ll b)//快速幂加快求幂数
  14. {
  15. ll ans=;
  16. while(b)
  17. {
  18. if(b&) ans=(ans*a)%mod;
  19. b>>=;
  20. a=(a*a)%mod;
  21. }
  22. return ans;
  23. }
  24. void divide(ll n) {//求出n里所有的素数银子
  25. for(ll i=;i*i<=n;++i) {
  26. if(n%i==) {
  27. prime.push_back(i);ll cnt=;
  28. while(n%i==) {n/=i;++cnt;}
  29. times.push_back(cnt);
  30. }
  31. }
  32. if(n>) {prime.push_back(n);times.push_back();}
  33. }
  34. int main()
  35. {
  36. ll a,b;
  37. scanf("%lld%lld",&a,&b);
  38. divide(a);
  39. ll ans=;
  40. for(int i=,end=prime.size();i<end;++i) {
  41. times[i]*=b;//乘了括号外的乘方
  42. if((prime[i]-)%mod==) ans=ans*(times[i]+)%mod;//当底数为1时,就是乘以项数
  43. else ans=ans*((qpow(prime[i],times[i]+)-+mod)*qpow(prime[i]-,mod-)%mod)%mod;//等比数列公式
  44. }
  45. printf("%lld\n",ans);
  46. return ;
  47. }

POJ - 1845 G - Sumdiv (唯一分解定理)的更多相关文章

  1. 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)

    [POJ 1845] Sumdiv 用的东西挺全 最主要通过这个题学了约数和公式跟二分求等比数列前n项和 另一种小优化的整数拆分  整数的唯一分解定理: 随意正整数都有且仅仅有一种方式写出其素因子的乘 ...

  2. 【简●解】POJ 1845 【Sumdiv】

    POJ 1845 [Sumdiv] [题目大意] 给定\(A\)和\(B\),求\(A^B\)的所有约数之和,对\(9901\)取模. (对于全部数据,\(0<= A <= B <= ...

  3. POJ 1845:Sumdiv 快速幂+逆元

    Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16466   Accepted: 4101 Descripti ...

  4. 【POJ 1845】 Sumdiv

    [题目链接] 点击打开链接 [算法] 不妨先将A分解质因数 A = p1^q1p2^p2p3^p3..pn^qn 那么,A^B = p1^q1Bp2^q2B...pn^qnB 根据约数和定理,A^B的 ...

  5. 【POJ 1845】Sumdiv——数论 质因数 + 分治 + 快速幂

    (题面来自luogu) 题目描述 输入两个正整数a和b,求a^b的所有因子之和.结果太大,只要输出它对9901的余数. 输入格式 仅一行,为两个正整数a和b(0≤a,b≤50000000). 输出格式 ...

  6. POJ 1845 Sumdiv (整数唯一分解定理)

    题目链接 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25841   Accepted: 6382 Desc ...

  7. POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)

    Sumdiv Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. poj 1845 Sumdiv (等比求和+逆元)

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  9. POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...

随机推荐

  1. luffy后端之跨域corf的解决方法

    跨域CORS 我们现在为前端和后端分别设置两个不同的域名 window 系统: C:\Windows\System32\drivers\etc\host linux/mac系统: /etc/hosts ...

  2. 如何查找php-fpm监听的端口

    1. 找到php的安装位置.如: /usr/local/php-7.3.3 2. 进入安装目录下的etc/php-fpm.d目录,然后你会看到: 3. 打开www.conf,搜索listen关键字,你 ...

  3. dp 最大正方形

    洛谷P1387 最大正方形 分析:画图模拟,发现以坐标(i,j)为右下顶点的正方形可以根据它左上方的三个点得到,就很轻松写出状态转移方程了. 代码: #include<bits/stdc++.h ...

  4. 『C++』STL容器入门

    最近在学习opencv,因为C++基础很烂,所以遇到了不少问题,其中STL模块也是没少接触,特此简单了解一下STL的容器类型(主要是Vector)和迭代器的简单用法. C++ STL(标准模板库)是一 ...

  5. React文档(四)渲染元素

    元素是React应用的最小单位. 一个React元素描述了你在屏幕上所看到的东西: const element = <h1>Hello, world</h1>; 和浏览器页面中 ...

  6. 创建springboot的聚合工程(二)

    前篇已经成功创建了springboot的聚合工程并成功访问,下面就要开始子工程木块之间的调用: springboot项目的特点,一个工程下面的类必须要放在启动类下面的子目录下面,否则,启动的时候会报错 ...

  7. [转]2017年最具价值的十大开源项目!GitHub 年度报告~

    <GitHub 2017 年度报告>GitHub 每年都会在年度盛会中推出数据报告,其中列出了一些年度的数据,包括其网站中最受欢迎的编程语言.开源项目等.那么今年哪些开源项目最具价值呢?我 ...

  8. Pick-up sticks

    Pick-up sticks Stan has n sticks of various length. He throws them one at a time on the floor in a r ...

  9. [Uva P11168] Airport

    题目是英文的,这里就不给出来了. 题目的大意是说,在平面上有n个点,要找一条直线,使所有点到直线的平均距离最小,且这些点都在该直线的同一侧(包括直线上). 那么,既然要使距离最小化,还要使所有点一定在 ...

  10. Docker的简单介绍及使用

    Docker介绍 Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Doc ...