当前位置: 首页 > 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.cnnetsun.cn/news/28616.html

相关文章:

  • 15、C语言编程:风格、命名与文档的艺术
  • 腾讯混元大模型Hunyuan-Large开源在即:3890亿参数MoE架构引领AI技术新突破
  • NCMconverter:解锁网易云音乐加密文件的专业解决方案
  • 腾讯混元3D开源P3-SAM:引领三维零件分割进入全自动时代
  • NextStep-1横空出世:140亿参数开启连续令牌 autoregressive 图像生成新纪元
  • Llama-Factory能否用于构建智能营养师推荐系统?
  • 突破2.4万亿参数壁垒:文心大模型5.0全模态能力深度解析与实测
  • 通义大模型矩阵震撼发布:多模态AI技术引领千行百业智能化革命
  • 31、Linux文件所有权与权限设置全解析
  • 32、Linux 文件权限与网络连接管理全解析
  • 22、网络、互联网与万维网基础全解析
  • SElinux策略文件配置
  • 瑞士发布国家级开源大模型Apertus:AI公共基础设施的全球新范式
  • 2025年AI推理里程碑:Inclusion AI开源万亿参数模型Ring-1T,数学推理性能跃升14%
  • 5、内核调试技术全解析
  • 8、Linux内核中的时间处理、延迟与异步工作调度
  • 10、与硬件通信:I/O端口和内存的使用指南
  • 17、Linux 块设备驱动开发全面解析
  • 20、Linux内核开发资源与技术要点解析
  • 29、Linux系统启动与电源管理全解析
  • 32、深入理解进程与线程
  • 45、基于IP地址十六进制表示创建软件密钥及任意进制转换脚本
  • 中文跨模态里程碑:Chinese-CLIP-ViT-Base-Patch16模型深度解析与应用指南
  • 开源多模态新突破:CogVLM2-LLaMA3-Chat-19B-Int4模型深度解析与应用指南
  • 43、Samba与不同操作系统的连接及OS/2系统的使用配置
  • 45、Samba配置中的操作系统特定问题与GNU GPL协议解读
  • 47、网络技术与Samba服务全面解析
  • 40亿参数掀起AI效率革命:Qwen3-4B-FP8重新定义轻量级大模型技术标杆
  • 文心ERNIE4.5工程化部署指南:FastDeploy性能优化与多场景实测报告
  • 14、Docker Swarm 集群搭建与管理指南