题目链接:http://poj.org/problem?id=1845

题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000)

解题思路:我们先利用唯一分解定理,将a分解成(p1^q1)*(p2^q2)……(pk^qk)的形式,则a^b=((p1^q1)*(p2^q2)……(pk^qk))^b=(p1^q1b)*(p2^q2b)……(pk^qkb)

a^b的因子和就会等于(1+p1+p1^2+……p1^q1b)*(1+p2+p2^2+……p2^q2b)*……(1+pk+pk^2+……pk^qkb)

然后我们可以用等差求和公式转化为((p1^(q1b+1)-1)/(p1-1))*((p2^(q2b+1)-1)/(p2-1))……((pk^(qkb+1)-1)/(pk-1))

对于求逆元:

(a/b)%mod=(a%(mod*b))/b%mod。对B*mod取余,剩余的值必定是B的倍数,这种方法是用于mod和B小的时候,用在这题就刚好了。

#include<iostream>
using namespace std;
typedef long long ll;
const int MAXN=;
const int mod=;
ll a,b,prime[MAXN],tot;
void getPrime(int N){ //筛素数
for(int i=;i<=N;i++) prime[i]=;
for(int i=;i<=N;i++){
if(prime[i])
prime[tot++]=i;
for(int j=;j<tot&&prime[j]*i<=N;j++){
prime[i*prime[j]]=;
if(i%prime[j]==)break;
}
}
}
ll qmul(ll a,ll b,ll m){
ll res=;
while(b){
if(b&) res=(res+a)%m;
b>>=;
a=(a+a)%m;
}
return res;
}
ll qpow(ll a,ll b,ll m){
ll res=;
while(b){
if(b&) res=qmul(res,a,m); //直接相乘会爆,可以一个一个加
a=qmul(a,a,m);
b>>=;
}
return res;
}
ll solve(ll x,ll y){
ll ans=;
for(int i=;prime[i]*prime[i]<=x;i++){
if(x%prime[i]==){
int cnt=;
while(x%prime[i]==){
cnt++;
x/=prime[i];
}
ll M=(prime[i]-)*mod;
ans=ans*(qpow(prime[i],cnt*y+,M)-+M)%M/(prime[i]-)%mod;
}
}
if(x>){
ll M=(x-)*mod;
ans=ans*(qpow(x,y+,M)-+M)%M/(x-)%mod;
}
return ans;
}
int main(){
cin>>a>>b;
getPrime();
cout<<solve(a,b)<<endl;
return ;
}

最新文章

  1. Visual Studio 推荐插件--高量,变量高量,语法高亮
  2. php里session的用法
  3. vector &amp; array
  4. shell script入门
  5. uglifyjs使用
  6. C# 查找指定名称的控件(转)
  7. 经典排序算法 - 基数排序Radix sort
  8. jquery.form.js用法之清空form的方法
  9. 【Java SE】如何用Java实现直接选择排序
  10. SimpleDateFormat 常规用法
  11. Cisco Common Service Platform Collector - Hardcoded Credentials(CVE-2019-1723)
  12. java的同步方法和同步代码块,对象锁,类锁区别
  13. mysql常用的查询优化
  14. SQL Server 2016以上版本大小写敏感的解决办法
  15. drupal8
  16. 读书笔记(05) - 事件 - JavaScript高级程序设计
  17. 用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)
  18. 关于Java IO与NIO知识都在这里
  19. 【BZOJ3312】[Usaco2013 Nov]No Change 状压DP+二分
  20. 爱奇艺全国高校算法大赛初赛A

热门文章

  1. CKEDITOR Copying images from word
  2. BZOJ 3306: 树 LCT + set 维护子树信息
  3. Oulipo (poj3461
  4. [CSP-S模拟测试]:Equation(数学+树状数组)
  5. Spring Boot 的单元测试
  6. flask中获取request的参数的方法
  7. RDA项目debug
  8. JS-Number 的精度
  9. 16/7/8_PHP-书写规范 PHP Coding Standard
  10. 洛谷T89644 palindrome回文串