poj1845(二分快速求等比数列模M和)
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 17039 | Accepted: 4280 |
Description
Input
Output
Sample Input
2 3
Sample Output
15
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define MOD 9901 typedef long long ll;
//a^b%mod 快速幂
long long Quk_Mul(long long a,long long b,long long mod)
{
long long qsum=;
while(b)
{
if(b&) qsum=(qsum*a)%mod;
b>>=;
a=(a*a)%mod;
}
return qsum;
}//二分计算1+a+a^2+...+a^b long long Bin_Find(int a,long long b)
{
if(b==) return ;
if(b%==)
{
return ( Bin_Find(a, b/-)+Bin_Find(a, b/-)*Quk_Mul(a, b/+, MOD)+Quk_Mul(a, b/, MOD) )%MOD;
}
else
{
return ( Bin_Find(a, b/)+Quk_Mul(a, b/+, MOD)*Bin_Find(a, b/) )%MOD;
}
} long long GetDivsorSum(int x,int b)
{
long long sum=;
for(int i=;i*i<=x;i++)
{
long long tmp=;
if(x%i == )
{
while(x%i==)
{
x/=i;
tmp++;
}
//假设
tmp *= b;
sum *= Bin_Find(i,tmp);
sum%=MOD;
}
} if(x>)//在这里x可能等于 9901
{
long long tmp=;
tmp *= b;
int i=x;
sum *= Bin_Find(i, tmp);
sum%=MOD;
}
return sum;
} int main(int argc, const char * argv[]) {
int a,b;
// for(int i=2;i<9901;i++)
// if(9901%i==0) printf("%d\n",i);
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==)
{
printf("0\n");
}
else if(b==)
printf("1\n");
else
cout<<(GetDivsorSum(a,b)%MOD+MOD)%MOD<<endl;
/*
long long tmp=1;
long long ans=0;
for(int i=0;i<b;i++) tmp*=a;
for(int j=1;j<=tmp;j++)
{
if(tmp%j==0) ans=ans+j;
ans%=MOD;
}
cout<<ans<<endl;
*/
}
return ;
}
//求一个数的因子和。因为求逆元不是很方便,所以采用二分求等比数列和
poj1845(二分快速求等比数列模M和)的更多相关文章
- hdu 1005 Number Sequence(矩阵连乘+二分快速求幂)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1005 代码: #include<iostream> #include<stdio.h&g ...
- 九度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). ...
- 二分求幂/快速幂取模运算——root(N,k)
二分求幂 int getMi(int a,int b) { ; ) { //当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存 == ) { ans *= a; } a *= a; b / ...
- POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有 ...
- POJ1845 数论 二分快速取余
大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题思路: 应用定理主要有三个: (1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...
- NYOJ--102--次方求模(快速求幂取模)
次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元
题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...
- HDU6128 二次剩余/二次域求二次剩余解/LL快速乘法取模
LINK 题意:求满足模p下$\frac{1}{a_i+a_j}\equiv\frac{1}{a_i}+\frac{1}{a_j}$的对数,其中$n,p(1\leq n\leq10^5,2\leq p ...
随机推荐
- (转)指针的引用(*&)与指针的指针(**)
本文转载而来,转载出处:http://www.cppblog.com/doing5552/archive/2010/09/28/127994.html 在下列函数声明中,为什么要同时使用*和& ...
- Hive设置参数的三种方法
Hive提供三种可以改变环境变量的方法,分别是:(1).修改${HIVE_HOME}/conf/hive-site.xml配置文件:(2).命令行参数:(3).在已经进入cli时进行参数声明.下面分别 ...
- [Tools] Support VS Code Navigation and Autocomplete Based on Webpack Aliases with jsconfig.json
It's common to setup Webpack aliases to make imports much more convenient, but then you lose the abi ...
- mysql double 乘法 缺失精度
CREATE TABLE tmp_decimal( id BIGINT auto_increment PRIMARY KEY , amount DOUBLE ); 创建测试表 插入测试数据 INSER ...
- 【转载】Loadrunner实现Android / IOS 手机APP压力测试
随着手机APP用户量的增大,大的手机APP一般都需要进行压力测试,这几天用了loadrunner 12进行了手机APP的压力测试,整理了下,大家可以参考参考怎样给Andorid / IOS手机APP进 ...
- Android中Activity的生命周期图
- Jscript 随记
1.Jscript 不能用来编写独立执行的应用程序,而且没有对读写文件的内置支持. 2.注意,语句块中的原始语句以分号结束.但语句块本身并不以分号结束. 3.注意,Jscript 与 C++ 以及其它 ...
- python——super()
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: class A: def __init__(self): pr ...
- Ant Design Mobile 使用 rc-form
引入: import { createForm } from 'rc-form'; 步骤一:绑定 form // 将form表单的api绑定到props,便于调用 const EditHeaderWr ...
- Mysql5.6压缩包安装到windows&& 卸载命令
1.根目录下有一个my-default.ini,复制一下,重命名为my.ini,然后改一下my.ini为符合你情况的配置,一般只需要改basedir .datadir .port ,注意前边的井号去掉 ...