POJ 1845 Sumdiv <数论(逆元 / 二分递归)>
来源:互联网 发布:什么是雅思网络课程 编辑:程序博客网 时间:2024/05/17 07:41
题目:传送门
题目大意:输入两个数
分析:
这道题折腾了很久啊,值得写一写报告。
首先一个大于
那么
所以我们先求
求多项式
1)递归二分:
当
当
2)等比通项:
显然
ps:在一篇题解中,大神给出了求
代码:
/*等比通项*/#include <iostream>#include <cstring>#include <string>using namespace std;typedef long long LL;LL a,b;LL p,e;LL m=9901;LL multi(LL a,LL b,LL mod){ LL res=0; a%=mod; b%=mod; while(b){ if(b&1) res=(res+a)%mod; a=(a*2)%mod; b>>=1; } return res;}LL power(LL a,LL b,LL mod){ LL res=1; a%=mod; while(b){ if(b&1) res=multi(res,a,mod); a=multi(a,a,mod); b>>=1; } return res; }LL sum(LL p,LL n, mod){ if(!n) return 1; else{ if(n&1) return sum(p,n/2)*(power(p,n/2+1,mod)+1)%mod; else return sum(p,n/2-1)*(power(p,n/2+1,mod)+1)*power(p,n/2,mod)%mod; }}void solve(){ LL ans=1; for(int i=2;i*i<=a;){ if(a%i==0){ p=i; e=0; while(!(a%i)){ e++; a/=i; } if((p-1)%m==0){ LL M=m*(p-1); ans=ans*(power(p,e*b+1,M)+M-1)%M/(p-1)%m; } else ans=ans*(power(p,e*b+1,m)-1)*power(p-1,m-2,m)%m; } if(i==2) i++; else i+=2; } if(a>1){ p=a; e=1; if((p-1)%m==0){ LL M=m*(p-1); ans*=(power(p,e*b+1,M)+M-1)%M/(p-1)%m; } else ans=ans*(power(p,e*b+1,m)-1)*power(p-1,m-2,m)%m; } cout<<(ans+m)%m<<endl;}int main(){ while(cin>>a>>b){ solve(); } return 0;}
/*递归二分*/#include <iostream>#include <cstring>#include <string>using namespace std;typedef long long LL;LL a,b;LL p,e;LL mod=9901;LL power(LL a,LL b){ LL res=1; a%=mod; while(b){ if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; }LL sum(LL p,LL n){ if(!n) return 1; else{ if(n&1) return sum(p,n/2)*(power(p,n/2+1)+1)%mod; else return (sum(p,n/2-1)*(power(p,n/2+1)+1)+power(p,n/2))%mod; }}void solve(){ LL ans=1; for(int i=2;i*i<=a;){ if(a%i==0){ p=i; e=0; while(!(a%i)){ e++; a/=i; } ans=ans*sum(p,e*b)%mod; } if(i==2) i++; else i+=2; } if(a>1){ p=a; e=1; ans=ans*sum(p,e*b)%mod; } cout<<(ans+mod)%mod<<endl;}int main(){ while(cin>>a>>b){ solve(); } return 0;}
阅读全文
0 0
- POJ 1845 Sumdiv <数论(逆元 / 二分递归)>
- poj 1845 Sumdiv 数论--等比数列和(逆元或者递归)
- [数论+二分求等比数列]POJ 1845 Sumdiv
- POJ 1845 Sumdiv(数论)
- POJ 1845Sumdiv(数论)
- poj 1845 Sumdiv (数论)
- POJ 1845 Sumdiv 解题报告(二分 & 逆元)
- POJ 1845 Sumdiv(逆元或者二分求解等比数列)
- POJ 1845 Sumdiv(逆元)
- poj 1845 Sumdiv 数论
- POJ 1845(Sumdiv) 数论好题
- POJ 1845 Sumdiv (数论,约数和)
- POJ Sumdiv (数论+二分等比数列求和)
- POJ 1845 Sumdiv(逆元的应用)
- POJ 1845:Sumdiv 快速幂+逆元
- POJ 1845 Sumdiv(逆元+快速幂)
- POJ 1845 Sumdiv (逆元 等比数列求和)
- POJ 1845 Sumdiv 【推公式 | 逆元】
- MFC对话框背景
- 软件测试分类
- python_(7.14)
- Mac安装TensorFlow
- excel入门,如何玩转excel,你早该这么玩Excel笔记7
- POJ 1845 Sumdiv <数论(逆元 / 二分递归)>
- codeforces 7C Line
- MFC 软件登陆界面的实现(可以用来做启动画面,添加bmp图片,然后给图片加点击响应事件。)
- 数据库--mongodb(一):使用命令
- 自定义算法实现按精度去4舍5入处理double的数据
- 二维数组
- LeetCode 199 Binary Tree Right Side View(二叉树层序遍历)
- vs 2017 找不到stdio.h 文件问题
- 利用nodejs的简单web聊天