#include <iostream>
#include <vector>
#include <set>
#include <ctime>
const int M = 437;
const int p = 1003;
float U0 = 1.5;
const int N = 10000;
std::vector<float> gen(float R0, int m, int p)
{
srand(time(0));
std::vector<float> R;
std::vector<float> U;
std::set<float> sR;
std::pair<float,float> pair;
std::vector<std::pair<float, float>> vectorpair;
std::vector<int> vectorpairfind;
U.push_back(R0);
for (int i = 0; i < N; i++)
{
U.push_back(U.back()/*U[i]*/ * M - p*int(U.back()/*U[i]*/ * M / p));
float r_ = U[i] / p;
R.push_back(r_);
sR.insert(r_);
if (i == 0)
{
pair.first = r_;
}
else if (i == 1)
{
pair.second = r_;
vectorpair.push_back(pair);
vectorpairfind.push_back(0);
//std::cout << " " << vectorpair.back().first << " " << vectorpair.back().second << " ";
}
else
{
pair.first = pair.second;
pair.second = r_;
int counter = 0;
for (int j = 0; j < vectorpair.size(); j++)
{
if (pair.first == vectorpair[j].first && pair.second == vectorpair[j].second)
{
counter++;
break;
}
}
if (counter == 0)
{
vectorpair.push_back(pair);
vectorpairfind.push_back(0);
}
//std::cout << " " << vectorpair.back().first << " " << vectorpair.back().second << " ";
}
//std::cout <<"R="<<R.back()<<" "<<std::endl;
}
if (sR.size() == R.size())
std::cout << "lengths equal" << std::endl;
std::cout<<"R0="<<R0<<" sR="<<sR.size()<<" R="<<R.size()<<std::endl;
std::cout << "vectorpair.size() =" << vectorpair.size() << std::endl;
std::cout << "vectorpairfind.size() =" << vectorpairfind.size() << std::endl;
for (int i = 0; i < N-1; i++)
{
for(int j=0;j<vectorpair.size();j++)
if (vectorpair[j].first == R[i] && vectorpair[j].second == R[i + 1])
{
vectorpairfind[j]++;
}
}
int counter = 0;
for (int j = 0; j<vectorpair.size(); j++)
if (vectorpairfind[j] > 1)
{
counter++;
std::cout << "find" << vectorpair[j].first << " " << vectorpair[j].second << " count=" << vectorpairfind[j] << std::endl;
}
std::cout << "Find " << counter << " matches" << std::endl;
std::cout << "runtime = " << clock() / 1000.0 << std::endl;
return R;
}
int main()
{
float i = 1.5;
//for (i=0; i < p; i+=0.001)
{
U0 = i;
gen(U0, M, p);
}
std::cin.ignore();
return 0;
}
#include <iostream>
#include <vector>
#include <set>
const int M = 302;
const int p = 1003;
const float U0 = 0.5;
const int N = 200;
std::vector<float> gen(float R0, int m, int p)
{
std::vector<float> R;
std::vector<float> U;
std::set<float> sR;
U.push_back(R0);
for (int i = 0; i < N; i++)
{
U.push_back(U.back()/*U[i]*/ * M - p*int(U.back()/*U[i]*/ * M / p));
float r_ = U[i] / p;
R.push_back(r_);
sR.insert(r_);
//std::cout <<R.back()<<" ";
}
if (sR.size() == R.size())
std::cout << "lengths equal" << std::endl;
std::cout<<"sR="<<sR.size()<<" R="<<R.size();
return R;
}
int main()
{
gen(U0,M,p);
std::cin.ignore();
return 0;
}
подправил алгоритм но все равно до конца не читает
if ((fencrypted = fopen("cryptmessage.txt", "r")) == NULL) {
//printf("Cannot open file.\n");
std::cout << "Cannot open file.\n";
exit(1);
}
countbyte = 0;
while (!feof(fencrypted))//here update 04.03.2019
{
(ch = fgetc(fencrypted));// != -1/*EOF*/
bool b = false;
if (ct2 == 186)
b = true;
if (countbyte % N == 0 && countbyte != 0)
{
countbyte = 0;
memcpy(&id, str, N);
plaintext->push_back(decrypt(id, false));
countpb2++;
}
str[countbyte] = ch;
std::cout << str[countbyte];
countbyte++;
ct2++;
}