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的更多相关文章

  1. YBT 1633:【例 3】Sumdiv

    http://ybt.ssoier.cn:8088/problem_show.php?pid=1633 A^B 快速幂求结果,所有约数和,可以通过组合来进行得到. 技巧,通过递归得到1~n次的和.su ...

  2. 1633:【例 3】Sumdiv

    #include<bits/stdc++.h> #define ll long long using namespace std; ; ll a,b,ans=,cnt; ll p[],c[ ...

  3. 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】

    1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...

  4. 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie

    题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1​​≤r​1​​<l​2​​≤r​2​​≤N,x⨁yx\bigoplus yx⨁y 表示 ...

  5. LOJ#10064. 「一本通 3.1 例 1」黑暗城堡

    LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...

  6. 「LOJ#10050」「一本通 2.3 例 2」The XOR Largest Pair (Trie

    题目描述 在给定的 $N$ 个整数 $A_1,A_2,A_3...A_n$ 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数$N$. 第二行$N$个整数$A_i$. 输出格式 ...

  7. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd

    题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...

  8. 「LOJ#10034」「一本通 2.1 例 2」图书管理 (map

    题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需 ...

  9. 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP

    题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...

随机推荐

  1. 求 1+2+3+ …… +n

    题目来源: 自我感觉难度/真实难度: 题意: 分析: 自己的代码: def Sum_Solution(n): # write code here if n==1: return 1 else: ans ...

  2. 网络对抗技术 2017-2018-2 20152515 Exp4 恶意代码分析

    1.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 答:- 我会使用sysmon工具来 ...

  3. 20155311《网络对抗》Web安全基础实践

    20155311<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...

  4. Source insight 中 标题栏路径显示完整路径的方法

    在source insight 的标题栏中显示完整路径名的方法.Options -> Preferences -> Display -> Trim long path names w ...

  5. libgdx学习记录6——动作Action

    libgdx中的Action类能够有效的帮助我们实现位移.旋转.缩放.淡入淡出等效果,对游戏的设计很有用. Action是一个抽象类,本身不可以实例化.一般使用的它的继承类,常用的有 MoveToAc ...

  6. libgdx学习记录1——图片显示Texture

    libgdx底层采用opengl渲染,对图片进行了优化处理,与android原生态的bitmap不太一样. 相比而言,效率要高一些,不过只支持png,jpg,bmp三种格式. 显示中,一般将图片放在a ...

  7. JavaScript闭包简单应用

    闭包定义 在JavaScript中,当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包.简单说,闭包就是能够读取其他函数内部变量的函数. 闭包的作用: 1. 可以读取函数内部的变量 2. 让 ...

  8. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]

    题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...

  9. 设计模式 笔记 享元模式 Flyweight

    //---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1 ...

  10. C#调用python文件执行

    我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意 我用的是Visual studion 2017,python组件下载地址:http://ironpython.c ...