uva 12253 - Simple Encryption(dfs)

简介:

题目链接;uva 12253 - Simple Encryption

题目大意:给定K1。求一个12位的K2,使得KK21=K2%1012

解题思路:按位枚举,不且借用用高速幂取模推断结果。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;
const ll ite=(1<<20)-1;

ll N;

/*
ll mul_mod (ll x, ll n, ll mod) {
    ll ans = 0;
    x %= mod;
    n %= mod;

    while (n) {
        if (n&1)
            ans = (ans + x) % mod;
        x = 2 * x % mod;
        n >>= 1;
    }
    return ans;
}
*/
ll mul_mod(ll a, ll b, ll mod) {
    return (a * (b>>20) % mod * (1ll<<20) %mod + a*(b&(ite)) % mod) % mod;
}

ll pow_mod (ll x, ll n, ll mod) {
    ll ret = 1;
    while (n) {
        if (n&1)
            ret = mul_mod(ret, x, mod);
        x = mul_mod(x, x, mod);
        n >>= 1;
    }
    return ret;
}

bool dfs (int d, ll u, ll mod) {
    if (d == 12) {
        if (u >= 1e11 && pow_mod(N, u, mod) == u) {
            printf("%lld\n", u);
            return true;
        }
        return false;
    }

    for (int i = 0; i < 10; i++) {
        if (pow_mod(N, i * mod + u, mod) == u) {
            if (dfs(d+1, i * mod + u, mod * 10))
                return true;
        }
    }
    return false;
}

int main () {
    int cas = 1;
    while (scanf("%lld", &N) == 1 && N) {
        printf("Case %d: Public Key = %lld Private Key = ", cas++, N);
        for (int i = 0; i < 10; i++) {
            if (dfs(1, i, 10))
                break;
        }
    }
    return 0;
}






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5269717.html,如需转载请自行联系原作者
相关文章
|
8月前
|
流计算
POJ 3620--Avoid The Lakes【DFS】
POJ 3620--Avoid The Lakes【DFS】
40 0
|
存储 容器
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
226 0
Data Structures and Algorithms (English) - 7-18 Hashing - Hard Version(30 分)
Data Structures and Algorithms (English) - 6-6 Level-order Traversal(25 分)
Data Structures and Algorithms (English) - 6-6 Level-order Traversal(25 分)
109 0
PAT (Advanced Level) Practice - 1138 Postorder Traversal(25 分)
PAT (Advanced Level) Practice - 1138 Postorder Traversal(25 分)
109 0
Data Structures and Algorithms (English) - 6-4 Reverse Linked List(20 分)
Data Structures and Algorithms (English) - 6-4 Reverse Linked List(20 分)
125 0
Data Structures and Algorithms (English) - 7-8 File Transfer(25 分)
Data Structures and Algorithms (English) - 7-8 File Transfer(25 分)
112 0
|
存储 算法
PAT (Advanced Level) Practice - 1151 LCA in a Binary Tree(30 分)
PAT (Advanced Level) Practice - 1151 LCA in a Binary Tree(30 分)
134 0
|
C++
PAT (Advanced Level) Practice - 1038 Recover the Smallest Number(30 分)
PAT (Advanced Level) Practice - 1038 Recover the Smallest Number(30 分)
135 0
PAT (Advanced Level) Practice - 1098 Insertion or Heap Sort(25 分)
PAT (Advanced Level) Practice - 1098 Insertion or Heap Sort(25 分)
111 0