当前位置: 首页 > news >正文

信息学奥赛一本通 1633:【例 3】Sumdiv | OpenJudge 百练 1845:Sumdiv

【题目链接】

ybt 1633:【例 3】Sumdiv
OpenJudge 百练 1845:Sumdiv

【题目考点】

1. 乘法逆元

当模数p pp为质数时,可以使用快速幂求逆元
a − 1 m o d p = a p − 2 m o d p a^{-1} \bmod p =a^{p-2} \bmod pa1modp=ap2modp

2. 算术基本定理(分解质因数)

n nn分解质因数,得n = p 1 a 1 p 2 a 2 . . . p n a n n=p_1^{a_1}p_2^{a_2}...p_n^{a_n}n=p1a1p2a2...pnan
那么n nn的约数和为:( 1 + p 1 + . . . + p 1 a 1 ) ( 1 + p 2 + . . . + p 2 a 2 ) . . . ( 1 + p n + . . . + p n a n ) (1+p_1+...+p_1^{a_1})(1+p_2+...+p_2^{a_2})...(1+p_n+...+p_n^{a_n})(1+p1+...+p1a1)(1+p2+...+p2a2)...(1+pn+...+pnan)

3. 等比数列求和

等比数列求和公式:S = a 1 ( q n − 1 ) q − 1 S=\frac{a_1(q^n-1)}{q-1}S=q1a1(qn1),其中a 1 a_1a1为首项,q qq为公比,n nn为项数

4. 费马小定理

g c d ( a , p ) = 1 gcd(a,p)=1gcd(a,p)=1,p pp为质数时:a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1 \pmod pap11(modp)
推论g c d ( a , p ) = 1 gcd(a,p)=1gcd(a,p)=1,p pp为质数时:a b ≡ a b m o d ( p − 1 ) ( m o d p ) a^b\equiv a^{b \bmod (p-1)} \pmod pababmod(p1)(modp)p pp为质数。

【解题思路】

首先手写质数判断函数,判断确定9901为质数,设M = 9901 M=9901M=9901
A AA分解质因数,得:A = p 1 a 1 p 2 a 2 . . . p n a n A=p_1^{a_1}p_2^{a_2}...p_n^{a_n}A=p1a1p2a2...pnan
那么A B = p 1 a 1 B p 2 a 2 B . . . p n a n B A^B=p_1^{a_1B}p_2^{a_2B}...p_n^{a_nB}AB=p1a1Bp2a2B...pnanB
A B A^BAB的约数和为S SS
S = ( 1 + p 1 + . . . + p 1 a 1 B ) ( 1 + p 2 + . . . + p 2 a 2 B ) . . . ( 1 + p n + . . . + p n a n B ) S=(1+p_1+...+p_1^{a_1B})(1+p_2+...+p_2^{a_2B})...(1+p_n+...+p_n^{a_nB})S=(1+p1+...+p1a1B)(1+p2+...+p2a2B)...(1+pn+...+pnanB)
对于其中的一项1 + p k + . . . + p k a k B 1+p_k+...+p_k^{a_kB}1+pk+...+pkakB
p m = p k m o d M p_m=p_k\bmod Mpm=pkmodM

  • 如果M ∣ p k M\mid p_kMpk,则p m = 0 p_m=0pm=0
    ( 1 + p k + . . . + p k a k B ) m o d M = ( 1 + p m + p m 2 + . . . + p m a k B ) m o d M = 1 (1+p_k+...+p_k^{a_kB})\bmod M=(1+p_m+p_m^2+...+p_m^{a_kB})\bmod M=1(1+pk+...+pkakB)modM=(1+pm+pm2+...+pmakB)modM=1
  • 如果M ∣ ( p k − 1 ) M\mid (p_k-1)M(pk1),则p m = 1 p_m=1pm=1
    ( 1 + p k + . . . + p k a k B ) m o d M = ( 1 + 1 + 1 2 + . . . + 1 a k B ) = a k B + 1 (1+p_k+...+p_k^{a_kB})\bmod M=(1+1+1^2+...+1^{a_kB})=a_kB+1(1+pk+...+pkakB)modM=(1+1+12+...+1akB)=akB+1
  • 其它情况时
    M ∤ p k M\nmid p_kMpk,即g c d ( M , p k ) = g c d ( M , p k m o d M ) = g c d ( M , p m ) = 1 gcd(M, p_k) = gcd(M, p_k \bmod M)=gcd(M, p_m)=1gcd(M,pk)=gcd(M,pkmodM)=gcd(M,pm)=1
    M ∤ ( p k − 1 ) M\nmid (p_k-1)M(pk1),即g c d ( M , p k − 1 ) = g c d ( M , ( p k − 1 ) m o d M ) = g c d ( M , p m − 1 ) = 1 gcd(M, p_k-1) = gcd(M, (p_k-1)\bmod M) = gcd(M, p_m-1)=1gcd(M,pk1)=gcd(M,(pk1)modM)=gcd(M,pm1)=1
    S k = 1 + p k + . . . + p k a k B S_k=1+p_k+...+p_k^{a_kB}Sk=1+pk+...+pkakB
    S k m o d M = ( 1 + p m + . . . + p m a k B ) m o d M S_k \bmod M=(1+p_m+...+p_m^{a_kB}) \bmod MSkmodM=(1+pm+...+pmakB)modM
    使用等比数列求和公式,得:
    S k = p m a k B + 1 − 1 p m − 1 m o d M S_k=\dfrac{p_m^{a_kB+1}-1}{p_m-1}\bmod MSk=pm1pmakB+11modM
    • 对于S k S_kSk的分子,求( p m a k B + 1 − 1 ) m o d M = ( p m a k B + 1 m o d M − 1 ) m o d M (p_m^{a_kB+1}-1) \bmod M=(p_m^{a_kB+1}\bmod M-1) \bmod M(pmakB+11)modM=(pmakB+1modM1)modM
      模数M MM为质数,且g c d ( M , p m ) = 1 gcd(M,p_m)=1gcd(M,pm)=1,根据费马小定理,可以进行降幂处理:
      p m a k B + 1 m o d M = p m ( a k B + 1 ) m o d ( M − 1 ) m o d M p_m^{a_kB+1}\bmod M=p_m^{(a_kB+1)\bmod (M-1)}\bmod MpmakB+1modM=pm(akB+1)mod(M1)modM。该式可以使用快速幂取模算法求解。
    • 对于S k S_kSk分母中的一项1 p m − 1 m o d M \dfrac{1}{p_m-1} \bmod Mpm11modM,已知g c d ( p m − 1 , M ) = 1 gcd(p_m-1, M) = 1gcd(pm1,M)=1,可以求p m − 1 p_m-1pm1M MM的逆元,即( p m − 1 ) − 1 m o d M (p_m-1)^{-1} \bmod M(pm1)1modM
      由于模数M MM为质数,可以使用快速幂求乘法逆元:( p m − 1 ) − 1 m o d M = ( p m − 1 ) M − 2 m o d M (p_m-1)^{-1} \bmod M=(p_m-1)^{M-2} \bmod M(pm1)1modM=(pm1)M2modM

因此S k = ( p m ( a k B + 1 ) m o d ( M − 1 ) − 1 ) ( p m − 1 ) M − 2 m o d M S_k=(p_m^{(a_kB+1)\bmod (M-1)}-1)(p_m-1)^{M-2}\bmod MSk=(pm(akB+1)mod(M1)1)(pm1)M2modM
遍历A AA的所有质因数p k p_kpk,求出各个S k S_kSk的值,结果相乘并模M,得到最终结果。

【题解代码】

解法1:
#include<bits/stdc++.h>usingnamespacestd;#defineM9901#defineMOD(a,b)(((a)%(b)+(b))%(b))typedeflonglongLL;LL A,B,ans=1;map<LL,LL>f;//i是一个质因数,f[i]是i的指数voidinitFac(LL n){for(LL i=2;i*i<=n;++i)while(n%i==0){f[i]++;n/=i;}if(n>1)f[n]=1;}LLfastPow(LL a,LL b,LL m){LL r=1;while(b>0){if(b%2==1)r=r*a%m;a=a*a%m;b/=2;}returnr;}LLsolve(LL p,LL a)//对于A中的一项质因数p^a,求出S=1+p+...+p^aB{LL pm=p%M;if(pm==0)return1;elseif(pm==1)return(a*B+1)%M;else{LL fz=MOD(fastPow(pm,(a*B+1)%(M-1),M)-1,M);LL fm=fastPow(pm-1,M-2,M);returnMOD(fz*fm,M);}}intmain(){cin>>A>>B;if(A==0){cout<<0;return0;}if(A==1){cout<<1;return0;}initFac(A);for(pair<LL,LL>pa:f)ans=MOD(ans*solve(pa.first,pa.second),M);cout<<ans;return0;}
http://www.jsqmd.com/news/80071/

相关文章:

  • 手把手教你做“离钱近”的产品:拒绝自嗨,从MVP到快速变现!
  • BUPT网络安全之防火墙实验(实验三)
  • 15、C语言编程:风格、命名与文档的艺术
  • 16、C语言代码实现与指针使用详解
  • 17、C语言指针操作与结构体使用全解析
  • 18、C 语言指针、数组与内存模型深度解析
  • 19、C语言内存模型深入解析
  • 20、C语言内存模型与存储管理全解析
  • 21、C语言中的存储时长、生命周期与可见性
  • 22、C语言中的对象初始化、存储模型与文本处理
  • 23、C语言格式化输入与扩展字符集的深入解析
  • 24、C语言编程:二进制流、错误处理与性能优化
  • 哔哩下载姬终极指南:5个技巧让B站视频下载效率提升150%
  • NCMconverter:解锁网易云音乐加密文件的专业解决方案
  • 腾讯混元3D开源P3-SAM:引领三维零件分割进入全自动时代
  • 腾讯混元大模型Hunyuan-Large开源在即:3890亿参数MoE架构引领AI技术新突破
  • Ollama用户必看:ModelScope模型无缝接入教程,告别格式兼容难题
  • 突破文档解析瓶颈:PaddleOCR-VL以0.9B参数实现多模态SOTA性能
  • 25、C语言性能优化:内联函数与restrict限定符的应用
  • 26、性能测量与函数式宏的使用
  • 人工智能时代的语言模型:技术突破与行业应用新图景
  • MIT许可赋能多模态新纪元:Janus-Pro-1B模型全方位技术解析
  • 3.8B参数挑战7B性能:Phi-4-mini-flash-reasoning如何重塑轻量化数学推理
  • 大模型长上下文推理突破:Qwen3-30B-A3B实现百万Token处理,准确率达72.8%
  • 腾讯混元图像模型GGUF格式落地实践:本地化部署效率提升300%的技术方案解析
  • 重磅发布:KaLM-Embedding-V2.5横空出世,0.5B参数刷新紧凑型嵌入模型性能天花板
  • NextStep-1横空出世:140亿参数开启连续令牌 autoregressive 图像生成新纪元
  • downkyi终极指南:轻松下载B站8K超高清视频的完整教程
  • 蚂蚁集团重磅发布万亿参数大模型Ling-1T,开源领域多项推理能力刷新全球纪录
  • Llama-Factory能否用于构建智能营养师推荐系统?