现在的位置: 首页 > 综合 > 正文

仿射密码

2018年04月21日 ⁄ 综合 ⁄ 共 408字 ⁄ 字号 评论关闭

只要把模逆元求出来就很轻松了

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int const mod = 26;
char str[100];
int Expend_Gcd(int a,int n){
    int p = a,q = n;
    int x = 0,y = 1;
    int z = q/p;
    while(p != 1 && q != 1){
        int t = p;
        p = q % p;
        q = t;
        t = y;
        y = x - y * z;
        x = t;
        z = q/p;
    }
    y %= n;
    if(y < 0) y += n;
    return y;
}
int main(){
    int k1,k2;
    while(cin>>str>>k1>>k2){
        int x = Expend_Gcd(k1,mod);
        for(int i = 0;str[i];i++){
            int m = str[i] - 'A';
            str[i] = (x * (m - k2 + mod)) % mod + 'A';
        }
        puts(str);
    }
    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.