Ну и на будущее, если стоит 15 студия, ну или на крайняк 13 (ниже точно не работает), даже если сильно не заморачиваться, то в самых очевидных моментах можно вставить прагмы, чтобы распараллелить, не мало времени экономит =)
#include "stdafx.h"
#include <vector>
#include <fstream>
using namespace std;
bool g1(bool a, bool b, bool c, bool d)
{
return(a^b ^ (c&(d ^ 1)) ^ 1);
}
void main()
{
std::vector<int> vector;
ofstream f("analize17.txt");
const int len = 17;
bool ent[len + 2];//входной регистр
ent[len] = 0;
ent[len + 1] = 0;
int kol[131072];//выходы в 10ой форме для сортировки
bool ex[len];//выходной регистр
int count = 0;//счетчик различных выходов
//длина регистров
//первое преобразование из ent в ex
for (int i = 0;i < pow(2, len);i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((i >> (len - 1 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);
}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, len - 1 - k);
}
kol[i] = s;
}
//сортировка(стоит передалать для общего случая)
int temp;
for (int i = 0; i < pow(2, len); i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
}
//счетчик в отсортированном массиве
for (int i = 0;i < pow(2, len);i++)
{
if (kol[i] > 0)
{
f << kol[i] << endl;
vector.push_back(kol[i]);
count = count + 1;
}
}
f << "stage1:" << count;
f << endl;
//втрое-четвертое преобразование
for (int k = 0;k < 3;k++)
{
int count2 = 0;
int size = vector.size();
for (int i = 0;i < size;i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((vector[i] >> (6 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);
}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, 6 - k);
}
kol[i] = s;
}
//сортировка(стоит передалать для общего случая)
for (int i = 0; i < size; i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
}
//счетчик в отсортированном массиве
vector.erase(vector.begin(), vector.end());
for (int i = 0;i < pow(2, len);i++)
{
if (kol[i] > 0)
{
f << kol[i];
f << endl;
vector.push_back(kol[i]);
count2 = count2 + 1;
}
}
f << "stage" << k + 2 << ":" << count2 << endl;
}
f.close();
}
Предварительно нужно проект настроить.