POJ 1845 Sumdiv(逆元)
题目链接:Sumdiv
题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值。
任意正整数都有且只有唯一的方式写出其质因子的乘积表达式
$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(逆元)的更多相关文章
- poj 1845 POJ 1845 Sumdiv 数学模板
筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#i ...
- POJ 1845 Sumdiv 【二分 || 逆元】
任意门:http://poj.org/problem?id=1845. Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions ...
- poj 1845 Sumdiv (等比求和+逆元)
题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...
- POJ 1845 Sumdiv 【逆元】
题意:求A^B的所有因子之和 很容易知道,先把分解得到,那么得到,那么 的所有因子和的表达式如下 第一种做法是分治求等比数列的和 用递归二分求等比数列1+pi+pi^2+pi^3+...+pi^n: ...
- Sumdiv POJ - 1845 (逆元/分治)
Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...
- POJ 1845 Sumdiv(求因数和 + 逆元)题解
题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- POJ 1845 Sumdiv (数学,乘法逆元)
题意: 给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod 9901 的结果. 思路: 即使知道公式也得推算一阵子. 很容易知道,先把分解得到,那么得到,那么的所有因子之和的表达式如下: ...
- poj 1845 Sumdiv 约数和定理
Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...
随机推荐
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-25: ordinal not in range(128)
python报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-25: ordinal not in ...
- 迁移 VMware 虚拟机到 KVM
虚拟机转换| VMware vCenter Converterhttps://www.vmware.com/cn/products/converter.html 迁移 VMware 虚拟机到 KVMh ...
- [转帖]SUSE Linux
历经坎坷多次易主,SUSE Linux路在何方? http://blog.itpub.net/11310314/viewspace-2638811/ 之前一直理不清楚 SUSE和RedHat的关系 甚 ...
- vue小问题库
引入vue组件命名时,不用特殊标签,比如<head>,不然会按特殊标签处理
- vue.js 添加 fastclick的支持
fastclick:处理移动端click事件300毫秒延迟 1.兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera ...
- Python--文件、文件夹、压缩包、处理模块shutil
高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 1 import shutil 2 3 shuti ...
- linux之ssh互信
1.如果你是之作root用户互信的话,直接一路执行如下命令就行. 1.切换你需要互信的账户 su hadoop1 2.执行命令,一路回车即可(在当前用的宿主用户目录下的.ssh目录下生成公钥和秘钥id ...
- ASP.NET Web.config文件的配置(Configuration API)
本次我们讨论主要聚焦在以下Web.config配置文件的设置值的读取. 1.<connectionString />连接字符串的读取. 2.<appSettings />应用程 ...
- Canvas & SVG
Canvas & SVG https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-dev ...
- GitHub & OAuth 2.0 & JWT
GitHub & OAuth 2.0 & JWT https://www.rfcreader.com/#rfc6749 GitHub & OAuth https://www.b ...