#include <iostream>
#include <string>
using namespace std;
int main( int argc, char ** argv)
{
int a, b,nbCombinaison;
string saisieTexteChiffre;
string dechiffre;
// saisie
cout << "Outil déchiffrement affine" << endl;
cout << "Veuillez entrer le texte chiffré en majuscule : " ;
getline( cin ,saisieTexteChiffre) ;
dechiffre = saisieTexteChiffre;
cout << "Veuillez entrer le coefficient directeur a : " ;
cin >> a;
cout << "Veuillez entrer l'ordonnée à l'origine b : " ;
cin >> b;
cout << "Table de déchiffrement" << endl;
for ( int i = 0 ; i < 26 * a; i++ )
{
cout << char ( ( i% 26 + 'A' ) ) << " " ;
}
cout << endl;
// table déchiffrement
for ( int i = 0 ; i < 26 * a; i++ )
{
cout << char ( ( ( i+ 'A' - 'A' - b) / a) + 'A' ) << " " ;
}
cout << endl << endl;
// déchiffrement
cout << "Déchiffrement" << endl;
nbCombinaison = 0 ;
for ( int j= 0 ; j< a; j++ )
{
for ( int i = 0 ; i < saisieTexteChiffre.length ( ) ; i++ )
{
if ( saisieTexteChiffre[ i] >= 'A' && saisieTexteChiffre[ i] <= 'Z' )
{
cout << char ( ( ( saisieTexteChiffre[ i] - 'A' + nbCombinaison- b) / a) % 26 + 'A' ) ;
}
else
{
cout << saisieTexteChiffre[ i] ;
}
}
cout << endl;
nbCombinaison + = 26 ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAKICAgaW50IGEsIGIsbmJDb21iaW5haXNvbjsKICAgc3RyaW5nIHNhaXNpZVRleHRlQ2hpZmZyZTsKICAgc3RyaW5nIGRlY2hpZmZyZTsKICAgLy8gc2Fpc2llCiAgIGNvdXQgPDwgIk91dGlsIGTDqWNoaWZmcmVtZW50IGFmZmluZSIgPDwgZW5kbDsKICAgCiAgIGNvdXQgPDwgIlZldWlsbGV6IGVudHJlciBsZSB0ZXh0ZSBjaGlmZnLDqSBlbiBtYWp1c2N1bGUgOiAiIDsKICAgZ2V0bGluZShjaW4sc2Fpc2llVGV4dGVDaGlmZnJlKTsKICAgZGVjaGlmZnJlID0gc2Fpc2llVGV4dGVDaGlmZnJlOwoKICAgY291dCA8PCAiVmV1aWxsZXogZW50cmVyIGxlIGNvZWZmaWNpZW50IGRpcmVjdGV1ciBhIDogIjsKICAgY2luID4+IGE7CiAgIAogICBjb3V0IDw8ICJWZXVpbGxleiBlbnRyZXIgbCdvcmRvbm7DqWUgw6AgbCdvcmlnaW5lIGIgOiAiOwogICBjaW4gPj4gYjsKIAogICBjb3V0IDw8ICJUYWJsZSBkZSBkw6ljaGlmZnJlbWVudCIgPDwgZW5kbDsKICAgZm9yKGludCBpID0gMDsgaSA8IDI2KmE7IGkrKykKICAgewogICAgICBjb3V0IDw8IGNoYXIoKGklMjYrJ0EnKSk8PCAiICI7CiAgIH0KICAgCiAgIGNvdXQgPDwgZW5kbDsKIAogICAvLyB0YWJsZSBkw6ljaGlmZnJlbWVudAogICBmb3IoaW50IGkgPSAwOyBpIDwgMjYqYTsgaSsrKQogICB7CiAgICAgIGNvdXQgPDwgY2hhcigoKGkrJ0EnLSdBJyAtIGIpL2EpKydBJykgPDwgIiAiOwogICB9CiAgIAogICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKICAgCiAgIC8vIGTDqWNoaWZmcmVtZW50CiAgIGNvdXQgPDwgIkTDqWNoaWZmcmVtZW50IiA8PCBlbmRsOwoKICAgbmJDb21iaW5haXNvbiA9IDA7CiAgIGZvcihpbnQgaj0wO2o8YTtqKyspCiAgIHsKICAgICAgZm9yKGludCBpID0gMCA7IGkgPCBzYWlzaWVUZXh0ZUNoaWZmcmUubGVuZ3RoKCk7IGkrKykKICAgICAgewogICAgICAgICBpZihzYWlzaWVUZXh0ZUNoaWZmcmVbaV0gPj0gJ0EnICYmIHNhaXNpZVRleHRlQ2hpZmZyZVtpXSA8PSAnWicpCiAgICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAgY2hhcigoKHNhaXNpZVRleHRlQ2hpZmZyZVtpXS0nQScrbmJDb21iaW5haXNvbi0gYikvYSklMjYrJ0EnKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCBzYWlzaWVUZXh0ZUNoaWZmcmVbaV07CiAgICAgICAgIH0KICAgICAgfQogICAgICBjb3V0IDw8IGVuZGw7CiAgICAgIG5iQ29tYmluYWlzb24gKz0gMjY7CiAgIH0KCgogICByZXR1cm4gMDsKfQ==