一本通1633【例 3】Sumdiv
1633:【例 3】Sumdiv
时间限制: 1000 ms 内存限制: 524288 KB
【题目描述】
原题来自:Romania OI 2002
求 ABAB 的所有约数之和 mod9901。
【输入】
输入两个整数 A,B。
【输出】
输出答案 mod9901。
【输入样例】
2 3
【输出样例】
15
【提示】
样例说明
23=8,8 的所有约数为 1,2,4,8,1+2+4+8=15,15mod9901=15,因此输出 15。
数据范围与提示:
对于全部数据,0≤A,B≤5×107。
sol:写了半天几乎吐血终于水过这道板子题
首先有个很显然的东西
对于一个数
如果他是p1a1*p1a2*p3a3*~~*pnan
那么他的因数和就是 (p10+p11+p12+...+p1a1)*(p20+p21+...+p2a2)*...*(pn1+pn2+...+pnan)
于是这道题就是要把所有质因数的幂次的乘积,先来推一下等比公式
令 S = p0+p1+p2+...+pa, (1)
则p*S = p1+p2+...+pa+pa+1, (2)
(2)-(1)可以得到 S*(p-1) = pa+1-p0,所以S= (pa+1-p0)/ (p-1) ,前面一项显然Ksm就可以解决,考虑后一项
需要用到p-1的逆元,如何求呢??
定义一个数a(就求a的逆元)
对于任意一个数 X/a ≡ X*Inva (%Mod)
易知 a*Inva ≡ 1 (%Mod)
随便推导下
原式: a*Inva = 1 (%Mod)
--> a*Inva-k*Mod = 1 (%Mod)
--> a*Inva+P*Mod = 1 (%Mod) (类ax+by=c的形式)
配上巨丑无比的代码
/*
原式: a*Inva = 1 (%Mod)
--> a*Inva-k*Mod = 1 (%Mod)
--> a*Inva+P*Mod = 1 (%Mod) (类ax+by=c的形式)
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll Mod=;
ll A,B;
int cnt=;
struct Prime
{
ll Shuz,Xis;
}Prim[];
inline ll Ksm(ll x,ll y)
{
ll ans=;
while(y)
{
if(y&)
{
ans=ans*x%Mod;
}
x=x*x%Mod;
y>>=;
}
return ans;
}
ll gcd(ll x,ll y)
{
return (!y)?(x):(gcd(y,x%y));
}
inline void Exgcd(ll a,ll b,ll &X,ll &Y)
{
if(b==)
{
X=;
Y=;
return;
}
Exgcd(b,a%b,X,Y);
ll XX=X,YY=Y;
X=YY;
Y=XX-a/b*YY;
return;
}
//a*Inva+Mod*k = 1 (%Mod)
inline ll Inv(ll Num)
{
ll a,b,c,r,X,Y;
a=Num;
b=Mod;
c=;
r=gcd(a,b);
Exgcd(a,b,X=,Y=);
X=X*r/c;
ll tmp=b/r;
X=(X>=)?(X%tmp):(X%tmp+tmp);
// printf("X=%lld Test=%lld\n",X,Num*X%Mod);
return X;
}
inline void Solve(ll Num)
{
int i;
for(i=;i<=sqrt(Num);i++)
{
if(Num%i==)
{
Prim[++cnt].Shuz=i;
Prim[cnt].Xis=;
while(Num%i==)
{
Prim[cnt].Xis++;
Num/=i;
}
Prim[cnt].Xis*=B;
}
}
if(Num>)
{
Prim[++cnt]=(Prime){Num,B};
}
return;
}
int main()
{
int i;
ll ans=1ll;
R(A); R(B);
Solve(A);
for(i=;i<=cnt;i++)
{
// printf("%lld %lld\n",Prim[i].Shuz,Prim[i].Xis);
ll tmp=(Ksm(Prim[i].Shuz,Prim[i].Xis+)-+Mod)%Mod;
tmp=tmp*Inv(Prim[i].Shuz-)%Mod;
ans=ans*tmp%Mod;
}
Wl(ans);
return ;
}
/*
input
2 3
output
15 input
10 6
output
5187 input
45279441 39876543
output
6060 input
9 8
output
5660
*/
一本通1633【例 3】Sumdiv的更多相关文章
- YBT 1633:【例 3】Sumdiv
http://ybt.ssoier.cn:8088/problem_show.php?pid=1633 A^B 快速幂求结果,所有约数和,可以通过组合来进行得到. 技巧,通过递归得到1~n次的和.su ...
- 1633:【例 3】Sumdiv
#include<bits/stdc++.h> #define ll long long using namespace std; ; ll a,b,ans=,cnt; ll p[],c[ ...
- 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】
1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
- 「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie
题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 ...
- 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd
题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...
- 「LOJ#10034」「一本通 2.1 例 2」图书管理 (map
题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需 ...
- 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP
题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...
随机推荐
- Android 给双ListView组织数据源
需求:现有这样一套原始数据{“A”,"B","C","D","B","A","B" ...
- day41
今日内容: 1.完整查询语句 2.多表查询 3.子查询 1.完整查询语句: 首先对于昨天的学习补充一个复制表 示例:首先我在一个库中创建了一个t1表(id 为int类型 设置为主键 并且设置了自增描述 ...
- URL最大长度
今天在测试Email Ticket的时候发现在进行Mark as Read/Unread操作时,请求是通过GET方式进行的.URL中列出了所有参与该操作的Ticket Id.于是,我想起GET请求是有 ...
- Regionserver启动后又关闭
今天启动hbase shell,输入hbase命令时报错: ERROR [regionserver/regionserver1/172.18.0.61:16020] reggionserver.HRe ...
- 汇编 (NOT)按位取反指令
知识点: (NOT)按位取反指令 逻辑取反(!) 按位取反(~) SETZ(SETE) 取ZF位值保存 SETNZ(SETNE)将ZF位值取反后保存 一.逻辑取反(!) !111 ...
- [Deep-Learning-with-Python]基于Kears的Reuters新闻分类
Reuters数据集下载速度慢,可以在我的repo库中找到下载,下载后放到~/.keras/datasets/目录下,即可正常运行. 构建神经网络将路透社新闻分类,一共有46个类别.因为有多个类别,属 ...
- Centos7下vim的table键修改为4个空格
1.要有root用户权限 2.已经安装vim 3.编辑/etc/vim/vimrc 文件,添加set ts=4 vim /etc/vimrc #按大写G到最后一行,添加set ts= set ts = ...
- js中的数据类型及判断方法
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型. 基本类型 ● Boolean ● Null ● Undefined ● Number ● String ● Symbol (ECM ...
- SSIS 更新变量
在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...
- Redis简介、安装、配置、启用学习笔记
前一篇文章有介绍关系型数据库和非关系型数据库的差异,现在就来学习一下用的较广的非关系型数据库:Redis数据库 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-v ...