POJ 1845 数论
来源:互联网 发布:软件项目介绍费 编辑:程序博客网 时间:2024/05/17 14:14
这题数论考察的范围很广。。我就被坑爹了。。。看来这种中档的数论题还是不够熟练。。T T
题意就是求A^B的约数之和,A,B上线很大,暴力坑定不行。。由于A^B的质因子与A的质因子相同,所以用唯一分解定理。根据唯一分解定理求出约数之和。若A=a1^b1*a2^b2*..*an^bn,则A的约数之和为S(a1,b1)*S(a2,b2)*...S(an,bn)。其中S(a,b)是1+a+..+a^b。。等比数列秒掉。接下来就是考虑模的问题。模除的公式是A%b=A*b^-1%mod...但使用逆元也是有条件的,就是b必须和mod互质,所以分两种情况讨论即可。附代码:
#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#ifdef _WIN32 #define ll __int64 #define out64 "%I64d\n" #define in64 "%I64d" #else #define ll long long #define out64 "%lld\n" #define in64 "%lld" #endif #define read(a) scanf(in64,&a)#define N 7100#define pb push_back#define mod 9901using namespace std;int a[N];vector<int>b;void prime(){ int i,j; for (i=2;i<N;i++) if (!a[i]) { b.pb(i); for (j=i*2;j<N;j+=i) a[j]=1; } return;}ll ssum(ll t,ll z){ ll q=t%mod,res=1; while (z>0) { if (z&1) res=(res*q)%mod; z>>=1; q=(q*q)%mod; } return res;}void extend(ll a0,ll b0,ll &x,ll &y){ if (!b0) { x=1;y=0; } else { extend(b0,a0%b0,x,y); int temp=x;x=y; y=temp-a0/b0*y; }} ll ny(ll t){ ll x,y; extend(t,mod,x,y); return (x%mod+mod)%mod;}ll sum(ll t,ll z){ if ((t-1)%mod==0) { return (z+1)%mod; } ll aa=(ssum(t,z+1)-1+mod)%mod; ll res=aa*ny(t-1)%mod; return res;}ll diving(ll n,ll m){ int i; ll res=1,n1=n; for (i=0;i<b.size();i++) if (n%b[i]==0) { ll z=0; while (n1%b[i]==0) { n1/=b[i]; z++; } z*=m; res=res*sum(b[i],z)%mod; } if (n1!=1) res=res*sum(n1,m)%mod; return res;}int main(){ ll n,m; prime(); while (read(n)!=EOF) { read(m); if (n==0) printf("0\n"); else if (m==0) printf("1\n"); else { ll res=diving(n,m); printf(out64,res); } } return 0;}
- POJ 1845 数论
- poj 1845 Sumdiv 数论
- POJ 1845 数论
- poj 1845 数论
- POJ-1845 数论
- poj 数论 1845
- POJ 1845(数论 模运算)
- POJ 1845 Sumdiv(数论)
- POJ 1845Sumdiv(数论)
- poj 1845 Sumdiv (数论)
- [数论+二分求等比数列]POJ 1845 Sumdiv
- POJ 1845 Sumdiv 简单数论问题
- POJ 1845 Sumdiv(数论+快速幂)
- POJ 1845(Sumdiv) 数论好题
- POJ 1845 Sumdiv (数论,约数和)
- POJ 1411 数论+优化
- POJ 2429 数论
- POJ 2480 Longge 数论
- 函数求“*”图
- 12864液晶模块驱动
- js 获取、更改HTML元素属性
- 1到n的阶乘和
- Uncaught cannot call methods on listview prior to initialization; 在刷新动态内容时报错的解决方案
- POJ 1845 数论
- POJ 2594 Treasure Exploration
- bash笔记:天级别的时间段
- postgresql 数据文件损坏回复实验
- unity3d中资源文件从MAX或者MAYA中导出的注意事项
- 读图-Google那些你不知道的事
- [黑马程序员]--Java语言基础一
- 第十二周上机项目一--调用函数输出星号图
- 有哪位高人知道采取什么方法可以测试 视频网站的视频播放速度,有源代码更好