hdu5478Can you find it
来源:互联网 发布:重庆cnc编程最新招聘 编辑:程序博客网 时间:2024/06/05 16:06
//求出所有(a^(k1*n+b1)+b^(k2*n-k2+1))%c == 0 的a,b//对于所有的n都成立//n = 1时(a^(k1+b1) + b)%c//枚举i找出对应的b//感觉应该有循环节//对于每一对成立的(a,b)找出对应的循环节//然后就过了#include<cstdio>#include<cstring>#include<iostream>#include<map>using namespace std ;const int maxn = 2e5+10 ;typedef long long ll ;ll mod ,k1 , k2 , b1 ;ll pow(ll a , ll k){ ll c = 1 ; while(k) { if(k&1)c = c*a%mod ; a = a*a%mod ; k >>= 1 ; } return c ;}map<pair<ll , ll> , int>ma ;bool ans[maxn] ;int judge(ll a , ll b){ ma.clear() ; for(ll i = 1;;i++) { ll t1 = pow((ll)a , k1*i+b1) ; ll t2 = pow((ll)b , k2*i-k2+1) ; pair<ll ,ll> tmp = make_pair(t1 , t2) ; if((t1+t2)%mod != 0) return -1 ; if(ma[tmp]) return i; ma[tmp] = 1; }}int main(){ //freopen("in.txt" , "r" , stdin) ; int cas = 0 ; while(~scanf("%lld%lld%lld%lld" , &mod , &k1 , &b1 , &k2)) { printf("Case #%d:\n" , ++cas) ; bool flag = false ; for(int i = 1;i < mod;i++) { ll t1 = pow(i , k1+b1) ; if(t1 == 0)continue ; ll t2 = mod-t1 ; if(judge(i , t2) != -1) printf("%d %d\n" , i , t2) ,flag = true ; } if(!flag)puts("-1") ; } return 0 ;}
0 0
- hdu5478Can you find it
- HDU5478Can you find it(快速幂)
- 周中训练笔记+HDU5478Can you find it【快速幂】
- hdu2141Can you find it?
- can you find it?
- Can you find it?
- hdu2141Can you find it?
- Can you find it?
- HDU2141Can you find it?
- hdu2141Can you find it?
- Can you find it?
- can you find it?
- Can you find it?
- can you find it?
- hdu2141_Can you find it?
- Can you find it?
- Can you find it?
- Can you find it?
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失.
- vim-projectionist插件
- 树莓派2B + Windows IoT
- DirectX11 XNA数学库之向量
- 利用VS生成静态库
- hdu5478Can you find it
- ThinkPHP--控制器调用模板
- 用Wget下载整个网站
- 分月饼(hdu1722)
- 黑马程序员-----c学习中的小程序
- 测试基础知识
- 软件复杂性分析
- google zxing编译
- 用python实现git blob对象的创建和查询