hdu5478 Can you find it(数学)

来源:互联网 发布:怎么样抓取精准数据库 编辑:程序博客网 时间:2024/05/01 16:11

思路:通过n=1的时候枚举a求出b,然后通过n=2的时候验证是否成立


#include<bits/stdc++.h>using namespace std;#define LL long longLL C,k1,b1,k2;LL qpow(LL x,LL n,LL mod){    LL ans=1;    while(n>0)        {        if(n&1)    ans=(ans*x)%mod;        x=(x*x)%mod;        n>>=1;    }    return ans;}int main(){    int T,cas=1;    while(scanf("%lld%lld%lld%lld",&C,&k1,&b1,&k2)!=EOF)    {        int flag = 0;        printf("Case #%d:\n",cas++);        for(LL a = 1;a<C;a++)        {            LL b = C-qpow(a,k1+b1,C);            LL x = qpow(a,2*k1+b1,C);            LL y = qpow(b,k2+1,C);            if((x+y)%C==0)            {                printf("%lld %lld\n",a,b);                flag = 1;            }        }        if(!flag)            printf("-1\n");    }}


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
 

0 0
原创粉丝点击