hdoj5478Can you find it【暴力枚举+快速幂】

来源:互联网 发布:路由器访客网络 编辑:程序博客网 时间:2024/05/12 00:09

Can you find it

Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 980    Accepted Submission(s): 421


Problem Description
Given a prime number C(1C2×105), and three integers k1, b1, k2 (1k1,k2,b1109). Please find all pairs (a, b) which satisfied the equation ak1n+b1 + bk2nk2+1 = 0 (mod C)(n = 1, 2, 3, ...).
 

Input
There are multiple test cases (no more than 30). For each test, a single line contains four integers C, k1, b1, k2.
 

Output
First, please output "Case #k: ", k is the number of test case. See sample output for more detail.
Please output all pairs (a, b) in lexicographical order. (1a,b<C). If there is not a pair (a, b), please output -1.
 

Sample Input
23 1 1 2
 

Sample Output
Case #1:1 22
 

Source
2015 ACM/ICPC Asia Regional Shanghai Online

用G++提交4700msc++提交超时

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;long long Pow(long long a,long long b,long long c){if(!b)return 1;long long t=Pow(a,b>>1,c);t=t*t%c;if(b&1)t=t*a%c;return t;}int main(){int t,i,j,k=1;long long  k1,k2,b1,c;while(~scanf("%lld%lld%lld%lld",&c,&k1,&b1,&k2)){bool sign=true;printf("Case #%d:\n",k++);for(int a=1;a<c;++a){long long ans=Pow(a,k1+b1,c);long long b=c-ans;if(b>=1&&b<c){for(j=1;j<=10;++j){if((Pow(a,k1*j+b1,c)+Pow(b,k2*j-k2+1,c))%c!=0){break;}}if(j>10){sign=false;printf("%lld %lld\n",a,b);}}}if(sign){printf("-1\n");}}return 0;} 


0 0
原创粉丝点击