POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
传送门:http://poj.org/problem?id=1845
大致题意:
求A^B的所有约数(即因子)之和,并对其取模 9901再输出。
解题基础:
1) 整数的唯一分解定理:
任意正整数都有且只有一种方式写出其素因子的乘积表达式。
,其中
为素数
2) 约数和公式:
对于已经分解的整数,A的所有因子之和为
3) 同余模公式:
(a+b)%m=(a%m+b%m)%m
(a*b)%m=(a%m*b%m)%m
1: 对A进行素因子分解
这里如果先进行筛50000内的素数会爆空间,只能用最朴素的方法进行分解
2:A^B的所有约数之和为
3: 求2中的等比序列
由于给的数据量大,肯定不能直接用等比序列的求和公式,要用分治法进行求解
一直对递归求解
S的下标为偶数类比一下
4:反复平方法计算幂次式
一个快速幂取模的板子,直接套上
- #include<iostream>
- #include<string.h>
- #include<cstdio>
- using namespace std;
- int p[10000];
- int q[10000];
- const int mod = 9901;
- //快速幂取模板子
- long long qucick_pow(int m, int n, int moD)
- {
- if(n == 0)
- return 1;
- long long x = qucick_pow(m, n / 2, moD);
- long long ans = x * x % mod;
- if(n % 2)
- ans = ans * m % mod;
- return ans;
- }
- // 递归求解等比数列
- long long sum(int m, int n)
- {
- if(n == 0)
- return 1;
- if(n % 2)
- {
- return (sum(m, n / 2) * (1 + qucick_pow(m, n / 2 + 1, mod))) % mod;
- }
- else
- {
- return (sum(m, n / 2 - 1) * (1 + qucick_pow(m, n / 2 + 1, mod)) + qucick_pow(m, n / 2, mod)) % mod;
- }
- }
- int main()
- {
- int a, b;
- scanf("%d %d", &a, &b);
- int cnt = 0;
- for(int i=2;i*i<=a;)
- {
- if(a%i==0)
- {
- p[cnt]=i;
- while(a%i==0)
- {
- a/=i;
- q[cnt]++;
- }
- cnt++;
- }
- if(i==2)
- i+=1;
- else
- i+=2;
- }
- if(a!=1)
- p[cnt]=a,q[cnt++]=1;
- long long ans = 1;
- for(int i = 0; i < cnt; i++)
- {
- ans = (ans * (sum(p[i], q[i] * b) % mod)) % mod;
- }
- cout << ans % mod << endl;
- }
POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]的更多相关文章
- POJ 3233-Matrix Power Series( S = A + A^2 + A^3 + … + A^k 矩阵快速幂取模)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 20309 Accepted: ...
- 快速幂取模(POJ 1995)
http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c ...
- HDU--杭电--4506--小明系列故事——师兄帮帮忙--快速幂取模
小明系列故事——师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- 【转】C语言快速幂取模算法小结
(转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速 ...
- HDU 1061 Rightmost Digit --- 快速幂取模
HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...
- UVa 11582 (快速幂取模) Colossal Fibonacci Numbers!
题意: 斐波那契数列f(0) = 0, f(1) = 1, f(n+2) = f(n+1) + f(n) (n ≥ 0) 输入a.b.n,求f(ab)%n 分析: 构造一个新数列F(i) = f(i) ...
- POJ3641-Pseudoprime numbers(快速幂取模)
题目大意 判断一个数是否是伪素数 题解 赤果果的快速幂取模.... 代码: #include<iostream> #include<cmath> using namespace ...
- 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模
题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...
随机推荐
- linux crash工具安装配置
crash简介 crash是redhat的工程师开发的,主要用来离线分析linux内核转存文件,它整合了gdb工具,功能非常强大.可以查看堆栈,dmesg日志,内核数据结构,反汇编等等.crash支持 ...
- P 1030 完美数列
转跳点:
- windows driver 获取文件属性
OBJECT_ATTRIBUTES oa; FILE_NETWORK_OPEN_INFORMATION fnoi; UNICODE_STRING strPath = RTL_CONSTANT_STRI ...
- Egret Engine 2D - 矢量绘图
绘制矩形 drawRect 绘制矩形边 lineStyle( 10, 0x00ff00 清空绘图 clear 绘制园形 drawCircle 绘制直线 moveTo lineTo 绘制曲线 cur ...
- C语言-浮点类型
C语言-浮点类型 浮点类型 在0的两侧有一小块区域,这个区域非常接近0,但是不等于0,是float(表达范围数量级10^-38^)或者double(达范围数量级10^-308^)无法表达的,而0是可以 ...
- 完美的代价(swap成回文串、贪心)
Description 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的. 现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串 ...
- idea新建java项目
盘符下新建一个目录: 打开idea: Open -> 新建的目录: 右击目录 -> new -> module: 填写模块名 -> finish: file -> pro ...
- 日志处理中一些shell命令技巧
日志处理中一些shell命令技巧 阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志.总结一下. 日志文件的输入是动则几个G的文本.从N个这样的文件中得到一个列表, ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(二)
本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(一)>,不清楚的请到我的博客空间查看后再看本篇博客 1)先创建一个Eureka服务注册中心模块,用来作为服务的 ...
- Win10 MySQL5.7中文乱码问题
https://blog.csdn.net/hh___56789/article/details/87900923 最好把 utf8 都换成utf8mb4 ,以免以后遇到意想不到的错误.utf8有漏洞 ...