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 ...
随机推荐
- PAT L2-024 部落
https://pintia.cn/problem-sets/994805046380707840/problems/994805056736444416 在一个社区里,每个人都有自己的小圈子,还可能 ...
- 配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题
配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题 - 大venn的博客 - CSDN博客https://blog.csdn.net/u011135260/article/details/ ...
- myeclipse部署报错报空指针异常
hib4.1+spring3+struts2项目 项目运行报错,把WEB-INF/classes目录删除后,想再重新编译并自动部署.再自动部署时总是提示错误: Errors occurred duri ...
- react双组件传值和传参
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery 选择器 特殊字符 转义字符
1.Jquery 选择器 id包含特殊字符,加双斜线 \\ 例 <input type="text" id="dbo_HouseInfo.HouseResour ...
- C#复习笔记(4)--C#3:革新写代码的方式(Lambda表达式和表达式树)
Lambda表达式和表达式树 先放一张委托转换的进化图 看一看到lambda简化了委托的使用. lambda可以隐式的转换成委托或者表达式树.转换成委托的话如下面的代码: Func<string ...
- javascript内置函数:toString()
不同对象有不同的实现方式. 1.Number对象: 语法:numberObject.toString([radix]) 参数:radix,可选/Number类型,指定的基数(进制数),支持[2,36] ...
- Failed to bind properties under 'spring.datasource' to javax.sql.DataSource
这是我的配置文件 # 国际化配置文件(包名.基础名) spring.messages.basename=i18n.login server.tomcat.uri-encoding=UTF- sprin ...
- Linux基础学习(16)--备份与恢复
第十六章——备份与恢复 一.备份概述 1.Linux系统需要备份的数据: 2.备份策略: 二.dump和restore命令 1.dump命令: 2.restore命令:
- 利用Python实现“指尖陀螺”,让你释放压力
前言 利用Python实现“指尖陀螺”,让你释放压力 基本环境配置 版本:Python3 系统:Windows 相关模块:turtle 实现效果 不停点击键盘空格键,这个陀螺会慢慢加速,从而达到一个减 ...