首页 技术 正文
技术 2022年11月15日
0 收藏 782 点赞 5,074 浏览 1053 个字

题目描述

求 A^B 的所有约数之和 mod 9901。

首先,我们要求出A的约数之和。

就是把A分解质因数,成为:a1^k1*a2^k2*a3^k2….

然后约数和就是(a1^0+a1^1+a1^2+….)*(a2^0+a2^1+….)*…….

那么A的B次方就是每一位都乘以一个B

然后对于每一个ai,都是一个等比数列求和。

然后求和公式需要用到除法,需要逆元。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <queue>
#define in(a) a=read()
#define MAXN 100010
#define REP(i,k,n) for(long long i=k;i<=n;i++)
using namespace std;
inline long long read(){
long long x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
long long pr[],ti[];
long long ind=;
long long mod=;
inline void divide(long long n){
for(long long i=;i*i<=n;i++)
if(n%i==){
pr[++ind]=i;
while(n%i==){
n=n/i;
ti[ind]++;
}
}
if(n>){
pr[++ind]=n;
ti[ind]=;
}
return ;
}
inline long long qpow(long long a,long long b){
long long ans=;
while(b){
if(b%) ans=(ans*a)%mod;
b/=;
a=(a*a)%mod;
}
return ans;
}
int main(){
long long a,b;
long long ans=;
in(a),in(b);
divide(a);
REP(i,,ind){
if(pr[i]-%mod==)
ans=ans*(ti[i]*b)%mod;
long long den,dor;
den=qpow(pr[i],b*ti[i]+)-;
dor=qpow(pr[i]-,mod-);
ans=(ans*(den*dor)%mod)%mod;
}
cout<<ans;
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902