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 ...
随机推荐
- 2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...
- UVA - 116 Unidirectional TSP (单向TSP)(dp---多段图的最短路)
题意:给一个m行n列(m<=10, n<=100)的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列.要求经过的整数之和最小.第一行的上一行是最后一行,最后一 ...
- MFC消息映射及消息处理函数原型
MFC把消息主要分为三大类: 1. 标准Windows消息(WM_XXX) 2. 命令消息(WM_COMMAND):凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮. 3. 控 ...
- hibernate中save、update、saveOrUpdate的区别
saveOrUpdate如果hibernate-mapping配置的主键已存在,就不会新增,会更新. ------------------------------------------------- ...
- Mybatis(1)-初识mybaits
一.概述 1.概述 mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动.创建连接.创建 state ...
- 给指定的div增加滚动条
这次的需求是给一个指定的div(里面有个table表格)增加上下.左右的滚动条 通过查找资料后找到了一个可用的方法,代码如下: <!--div比table大小要小才会显示--> <d ...
- SrpingMVC/SpringBoot中restful接口序列化json的时候使用Jackson将空字段,空字符串不传递给前端
笔者的JSON如下: { "code": 10001, "message": "成功", "nextUrl": null ...
- mysql 时区问题导致的时间相差14小时
1.mysql 字段名称 类型 begin_time TIME begin_time=08:18:39 2.java数据库连接串 jdbc:mysql://x.x.x.x:3306/y?useUnic ...
- Java 14 都要来了,为什么还有这么多人固守Java8?
作者:刘欣 从Java 9开始,Java版本的发布就让人眼花缭乱了. 每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份, ...
- POJ 3278:Catch That Cow
Catch That Cow Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submi ...