итеративный брутфорс для 5 элементов:
for c1 in set {
for c2 in set {
for c3 in set {
for c4 in set {
for c5 in set {
test(c1,c2,c3,c4,c5);
}}}}}
Чтобы разделить работу между потоками, просто создайте отдельную «начальную часть» для каждого потока. Таким образом, первая нить обрабатывает все палаты, начинающиеся с «а», вторая - «б» и так далее. (Если у вас более 26 потоков, то первый получает 'aa', второй 'ab' и так далее ...
Если вам нужно решение, которое лучше масштабируется по длине, то лучше сформулировать проблему рекурсивно (при желании это можно преобразовать в версию, используя вместо этого явные стеки):
unsigned char charset = /**/
unsigned int setsize = sizeof charset;
bool test(combination);
function bruteforce(output, n){
/* Goes through all character combinations of length n,
writing them in output and calling test on them afterwards */
if(n == 0){
test(output);
}else{
for(int i=0; i<setsize; i++){
output[n-1] = charset[i];
bruteforce(output, n-1);
}
}
}
unsigned char my_output[final_length];
bruteforce(my_output, final_length);