POJ 1845 Sumdiv(逆元)

时间:2021-12-02 00:58:31

题目链接:Sumdiv

题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值。

题解:了解下以下知识点
 
1.整数的唯一分解定理

任意正整数都有且只有唯一的方式写出其质因子的乘积表达式

$A={p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}*...*{p_n}^{k_n}$

2.整数因数个数

$B=(k_1+1)*(k_2+1)*(k_3+1)...*(k_n+1)$

3.整数因数总和

$S=(1+p_1+p_1^2+p_1^3+...+{p_1}^{k_1})*(1+p_2+p_2^2+p_2^3+...+{p_2}^{k_2})*...(1+p_n+p_n^2+p_n^3+...+{p_n}^{k_n})$

明显地:先分解整数A,A的整数因数总和能表示,A^B只不过是pi变成pi^B。

通过等比数列求和公式:$\dfrac{{p_1}^{k_1b+1}-1}{p_1-1}=1+p_1+p_1^2+p_1^3+...+{p_1}^{k_1b}$

费马小定理:

$a^{p-1} ≡1 (mod p)$

两边同除以a

$a^{p-2} ≡inv(a) (mod p)$

$inv(a) = a^{p-2} (mod p)$

快速幂求一下即可:

 ll fast_mod(ll x,ll y,ll mod){
ll res=;
while(y){
if(y&) res=fast_mul(res,x,mod);
x=fast_mul(x,x,mod);
y>>=;
}
return res;
}

直接使用快速幂可能爆long long,结合快速乘防止爆long long:

 ll fast_mul(ll x,ll y,ll mod){
ll res=;
while(y){
if(y&) res=(res+x)%mod;
x=(x+x)%mod;
y>>=;
}
return res;
}

最后一个问题,存在逆元的情况是$ax ≡1(mod p)$

如果a是p的倍数时候左边为0,明显不等于右边。可以使用这个公式

$ans=\dfrac{a}{b}modm=amod(mb)/b$

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long ll;
const int N=1e7;
const ll MOD=;
ll p[N],k[N];
ll a,b,c=; ll fast_mul(ll x,ll y,ll mod){
ll res=;
while(y){
if(y&) res=(res+x)%mod;
x=(x+x)%mod;
y>>=;
}
return res;
} ll fast_mod(ll x,ll y,ll mod){
ll res=;
while(y){
if(y&) res=fast_mul(res,x,mod);
x=fast_mul(x,x,mod);
y>>=;
}
return res;
} void solve(){
ll res=;
for(ll i=;i<c;i++){
ll M=MOD*(p[i]-);
res=res*(fast_mod(p[i],k[i]*b+,M)+M-)/(p[i]-)%MOD;
}
printf("%lld\n",(res+MOD)%MOD);
} int main(){
while(scanf("%lld%lld",&a,&b)!=EOF){
c=;
for(ll i=;i*i<=a;i++){
if(a%i==){
ll cnt=;
p[c]=i;
while(a%i==) a/=i,cnt++;
k[c]=cnt;
c++;
}
}
if(a>) {p[c]=a;k[c]=;c++;}
solve();
}
return ;
}

POJ 1845 Sumdiv(逆元)的更多相关文章

  1. poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...

  2. POJ 1845 Sumdiv 【二分 &vert;&vert; 逆元】

    任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...

  3. poj 1845 Sumdiv &lpar;等比求和&plus;逆元&rpar;

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  4. POJ 1845 Sumdiv 【逆元】

    题意:求A^B的所有因子之和 很容易知道,先把分解得到,那么得到,那么 的所有因子和的表达式如下 第一种做法是分治求等比数列的和  用递归二分求等比数列1+pi+pi^2+pi^3+...+pi^n: ...

  5. Sumdiv POJ - 1845 (逆元&sol;分治)

    Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...

  6. POJ 1845 Sumdiv(求因数和 &plus; 逆元)题解

    题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...

  7. poj 1845 Sumdiv(约数和,乘法逆元)

    题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...

  8. POJ 1845 Sumdiv (数学,乘法逆元)

    题意: 给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod 9901 的结果. 思路: 即使知道公式也得推算一阵子. 很容易知道,先把分解得到,那么得到,那么的所有因子之和的表达式如下: ...

  9. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

随机推荐

  1. iOS - NSMutableAttributedString富文本的实现

    NSMutableAttributedString继承于NSAttributedString(带属性的字符串)能够简单快速实现富文本的效果;不多说直接上效果图和代码,通俗易懂: (一)效果图: (二) ...

  2. service mysql start出错,mysql启动不了,解决mysql&colon; unrecognized service错误

    service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...

  3. Git一张图学习

  4. C&num;利用最新版的WPS实现导入导出

    微软的EXCEl操作相信大家也知道,不方便,安装包太大,而且表格的数据量也只有6000多(是6000多还是60000多我就忘记了),在导出导入大量数据的就没办法,而wsp表格则实现了百万数据的容量,而 ...

  5. 01顺序栈&lowbar;Stack---&lpar;栈与队列&rpar;

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  6. 【Jquery】之DOM操作

    Questions 本篇文章主要讲解Jquery中对DOM的操作,主要内容如下: 1    内容区 1.1  .addClass() (1).addClass(className) <!DOCT ...

  7. JavaScript方面的书籍

    我要向大家推荐两本js方面的书: <JavaScript权威指南> <JavaScript高级程序设计>适合想在js方面有所提高的开发人员 我们读书是为了什么? 有的人可能是兴 ...

  8. hosts文件路径及文件介绍

    路径:WINDOWS/system32/drivers/etc/hosts 内容127.0.0.1       localhost 一. Hosts文件的位置 很多用户都知道在Window系统中有个H ...

  9. 对称与非对称加密&semi;SSL&semi;HTTPS&semi;AJP

    1.对称加密就是加密与解密的时候都是用一个密码 2.非对称加密,有一对密码A,B:用A加密就得用B解密,相对的用B加密就得用A解密 3.公钥与私钥,这一对密码,随便拿一个公布出去,那个就是公钥,剩下一 ...

  10. laravel数据库迁移 和 路由防攻击

    命令:php  artisan  migrate 防攻击: