Aiuto Crittografia_rsa ultimo case

Salve,
sono nuovo nel portale e stavo provando a fare Crittografia Rsa. Uso il C++. Sono arrivato alla risoluzione di tutti i case escluso l’ultimo nel quale ottengo solo il 2 e il 3 test approvato, i restanti sbagliati perche’ oltre il quanto di tempo massimo (1 s). Di seguito il codice della funzione.

#include <map>
void decifra(int N, int d, int L, int* messaggio, char* plaintext)
{	
	std::map <int, long long int> mapCache;
	unsigned long long int A, B, power_a, result;
	bool isOdd;

	isOdd = d % 2 == 1 ? true : false;
	power_a = d >> 1;

	//itering through cripto numbers in array
	for(unsigned long long int index=0; index<L; index++){

		if(mapCache.find(messaggio[index]) == mapCache.end()){
			A = 1;
			B = 1;

			//(A · B) mod M = (A mod M · B mod M) mod M
			for(unsigned long long int num_potenza = 0; num_potenza < power_a; num_potenza++){	
				A = A % N * messaggio[index] % N;
			}

			//power of b
			if(isOdd){
				B = A % N * messaggio[index] % N;
			} else {
				B = A;
			}

			result = A % N * B % N;
			mapCache[messaggio[index]] = result;
		} else {
			result = mapCache[messaggio[index]];
		}

		//decrypted char assignment
		plaintext[index] = result;
	}

	plaintext[L] = '\0';
}

Ho aggiunto map in seguito perche’ mi e’ stata utile in esercizi precedenti, anche se con risultati nulli. Qualche consiglio? Cosa non ho preso in considerazione? Grazie in anticipo a chi dedichera’ tempo a rispondermi :smiley:

F orse esiste un modo più veloce di elevAre un numero n ad un eSponenTe m? magari sfruttando la rapprEsentazione binaria di m?XPO

1 Mi Piace

Grazie mille. Mi hai riportato sulla strada giusta da seguire