HDU5478 Can you find it 快速幂取模
来源:互联网 发布:python asyncio.wait 编辑:程序博客网 时间:2024/05/01 16:49
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5478
题目大意:找出满足模等式a^(k1*n+b1)+b^(k2*n-k2+1)=0(mod C)的所有(a,b),并按升序输出。其中C为素数且小于2*10^5,a,b<C,n为正整数。
分析:因为对任意的正整数n都成立,n=1时有:a^(k1+b1)+b=0(mod C),我们令等式两边同时乘上a^k1,得到:a^(k1*2+b1)+a^k1*b=0(mod C);n=2时我们有:a^(k1*2+b1)+b^(k2+1)=0(mod C),对比这两个等式我们会发现,a^k1==b^k2。那么接下来就好办了,我们只需枚举每一个a,然后b=C-a^(k1+b1),如果a^k1==b^k2,那么(a,b)就为满足原模等式的ab对。
实现代码如下:
#include <cstdio>using namespace std;typedef long long ll;ll quick_mod(ll a,ll b,ll m){ ll ans=1; a%=m; while(b) { if(b&1) ans=ans*a%m; b>>=1; a=a*a%m; } return ans;}int main(){ int C,k1,k2,b1,T=1; int b; while(scanf("%d%d%d%d",&C,&k1,&b1,&k2)!=-1) { bool flag=false; printf("Case #%d:\n",T++); for(int i=1;i<C;i++) { b=C-quick_mod(i,k1+b1,C); if(quick_mod(i,k1,C)==quick_mod(b,k2,C)) { flag=true; printf("%d %d\n",i,b); } } if(!flag) puts("-1"); } return 0;}
0 0
- HDU5478 Can you find it 快速幂取模
- HDU5478 Can you find it (快速幂)
- hdu5478 Can you find it+快速幂
- HDU5478 Can you find it
- hdu5478 Can you find it
- HDU5478——Can you find it(快速幂)
- hdu5478 Can you find it(数学规律)
- hdu5478 Can you find it(数学)
- HDU5478 Can you find it【同余问题】
- can you find it?
- Can you find it?
- Can you find it?
- Can you find it?
- can you find it?
- Can you find it?
- can you find it?
- Can you find it?
- Can you find it?
- HDU 5479 Scaena Felix(DP)
- Activity的启动模式LaunchMode
- 初识正则表达式
- HDU 5475 An easy problem (暴力||线段树_好题 )
- Hibernate n+1问题
- HDU5478 Can you find it 快速幂取模
- Java的OutOfMemory问题
- iOS Tips-01
- java jsp+servlet文件上传下载、本地及网络资源的下载
- "_stringprep", referenced from:+[LibIDN prepNode:] in LibIDN.o
- 构造所有二叉查找树
- css伪类,a标签的四种状态
- 找出最长递增子序列
- 英语的春天--程序员学英语