题目有点难,过题率只有百分之二十,今天做了一个下午,做不出停了一下,在做别的题目以后,回来速度A了,原来费马小定理那里写错了,9900写成了9901,有点粗心,
题目意思是求A,B,,求出A^B的所有约数之和S,然后输出S%9901;
开始分析:
对A进行素因子分解,pi为素数序列,A=p1^m1*p2^m2……pn^mn,那么 A^B=p1^(m1*B)*p2^(m2*B)……pn^(mn*B),在因子分解里有一个基本的理论:如果f是乘性函数,那么f的和函数F(n)=∑f(d),(其中 d|n ),也是乘性函数
那么接下来利用乘性函数,所有因子和就是 S=(1+p1+p1^2+……+p1^(n*B))*(1+p2+p2^2……+p2^(n*B))……(1+pn+pn^2+……+pn^(n*B)),然后利用等比数列求和 S=(1+p^(n*B+1))/(p1-1)*(1+p2^(n*B+1))/(p2-1)*……(1+p^(n*B+1))/(pn-1),
求和是 求每项的分子是用二分快速幂法,处理分母时,由于9901是一个素数,则会时候乘法逆元的思想就出现了,乘以这个数然后模9901的逆元就可以了
#include
#include
#include
#include
#include
#include
#include
#include
#include