fbpx

Problema #3310 – afin – Rezolvari PBInfo

de Mihai-Alexandru

Afin

Cifrul Afin este un cifru unde fiecare literă este înlocuită cu o altă literă printr-o operație matematica. Fiecărei litere i se asociază un cod: a-0, b-1, c-2, … z-25. De asemenea, mai avem două numere a și b, numite chei. Fiecare literă se înlocuiește cu litera care are codul egal cu (a*x+b)mod. 26 , unde x este codul literei.

Cerinta

Dându-se valoarea celor două chei și un mesaj să se afișeze mesajul criptat.

Date de intrare

Fișierul de intrare afin.in conține pe prima linie numerele a b iar pe a doua linie un mesaj.

Date de ieșire

Fișierul de ieșire afin.out va conține pe prima linie mesajul criptat.

Restricții și precizări

  • 1 ≤ a , b ≤ 26
  • 1 ≤ lungimea șirului ≤10000
  • mesajul va conține doar litere mici ale alfabetului englez

Exemplu

afin.in

17 20
twentyfifteen

afin.out

fekhfmbabfkkh
#include <bits/stdc++.h>
using namespace std;

ifstream cin("afin.in");
ofstream cout("afin.out");

char s[10001];

int main(){
    int a, b;
    cin >> a >> b;
    cin >> s;
    int i = 0;
    while(s[i]){
        int x = s[i] - 'a';
        int d = (a * x + b) % 26;
        d += 'a';
        s[i] = (char) d;
        i++;
    }
    cout << s;
    return 0;
}
Comentarii

S-ar putea sa iti placa