zoukankan      html  css  js  c++  java
  • UVALive 7457 Discrete Logarithm Problem (暴力枚举)

    Discrete Logarithm Problem

    题目链接:

    http://acm.hust.edu.cn/vjudge/contest/127401#problem/D

    Description

    http://7xjob4.com1.z0.glb.clouddn.com/42600d1bedc3c308a68ea0453befd84e

    Input

    The first line of the input file contains a prime p, 1 < p < 2^13 . This prime will be used in the following test cases. Each test case contains two integers a and b in a line. The last test case is followed by a line containing ‘0’.

    Output

    For each test case, print out the solution x to the equation a x = b in the finite group Zp. If there are no solutions, print ‘0’.

    Sample Input

    31 24 3 3 15 0

    Sample Output

    7 21
    ##题意: 求一个x使得 a^x%p = b .
    ##题解: 由于p的规模巨小(2^13),而取模的结果一定在p次以内出现循环,所以直接从0~p枚举x即可. 很多人TLE了,不知道什么姿势. (可能是末尾的0没有读好) 虽然是水题,还是很高兴拿了FB.
    ##代码: ``` cpp #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define eps 1e-8 #define maxn 1010 #define mod 100000007 #define inf 0x3f3f3f3f #define mid(a,b) ((a+b)>>1) #define IN freopen("in.txt","r",stdin); using namespace std;

    LL quickmod(LL a,LL b,LL m)
    {
    LL ans = 1;
    while(b){
    if(b&1){
    ans = (ansa)%m;
    b--;
    }
    b/=2;
    a = a
    a%m;
    }
    return ans;
    }

    int main(int argc, char const *argv[])
    {
    //IN;

    int p; cin >> p;
    LL a, b;
    while(scanf("%lld", &a) != EOF && a)
    {
        scanf("%lld", &b);
        a %= p; //b %= p;
    
        int ans = 0;
        for(int i=0; i<=p+1; i++) {
            if(quickmod(a, i, p) == b) {
                ans = i;
                break;
            }
        }
    
        printf("%d
    ", ans);
    }
    
    return 0;
    

    }

  • 相关阅读:
    2月4日进度
    每日总结3-6
    每日总结3-5
    每日总结3-4
    每日总结3-2
    本周计划
    本周计划
    假期每日总结2-13
    假期每日总结2-12
    假期每日总结2-11
  • 原文地址:https://www.cnblogs.com/Sunshine-tcf/p/5781439.html
Copyright © 2011-2022 走看看