Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1. #include<iostream>
  2. #include<time.h>
  3. #include<math.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. //#include<boost/multiprecision/cpp_int.hpp>
  7. using namespace std;
  8. //using namespace boost::multiprecision;
  9.  
  10. typedef long long int typ;
  11.  
  12. /*liczba1=rand()%2;
  13. liczba2=rand()%2;
  14. int max=0;
  15. /*for(int j=0;j<1000;j++){
  16. liczba1=rand()%2;
  17. for(int i=1;i<n;i++){
  18. liczba1=liczba1+FastPower(2,n-i)*(rand()%2);
  19. if(liczba1>max) max=liczba1;
  20. }
  21. }
  22. cout<<"MAX=="<<max<<endl;*/
  23. /*liczba1=rand()%2;
  24. liczba2=rand()%2;
  25. for(int i=1;i<n;i++){
  26. liczba1=liczba1+FastPower(2,n-i)*(rand()%2);
  27. liczba2=liczba2+FastPower(2,n-i)*(rand()%2);
  28. }*/
  29.  
  30.  
  31. typ norma(vector<typ> v1) {
  32. typ wynik = 0;
  33. for (size_t i = 0; i < v1.size(); i++) {
  34. wynik += (v1[i] * v1[i]);
  35. }
  36. return wynik;
  37. }
  38. typ iloczyn_skalarny(vector<typ> v1, vector<typ> v2) {
  39. typ wynik = 0;
  40. for (size_t i = 0; i < v1.size(); i++) {
  41. wynik += (v1[i] * v2[i]);
  42. }
  43. return wynik;
  44. }
  45. vector<typ> roznica(vector<typ> v1, vector<typ> v2) {
  46. vector<typ> wynik;
  47. for (size_t i = 0; i < v1.size(); i++) {
  48. wynik.push_back(v1[i] - v2[i]);
  49. }
  50. return wynik;
  51. }
  52. vector<typ> suma(vector<typ> v1, vector<typ> v2) {
  53. vector<typ> wynik;
  54. for (size_t i = 0; i < v1.size(); i++) {
  55. wynik.push_back(v1[i] + v2[i]);
  56. }
  57. return wynik;
  58. }
  59. vector<typ> mnozenie(vector<typ> v1, typ wsp) {
  60. for (size_t i = 0; i < v1.size(); i++) {
  61. v1[i] = v1[i] * wsp;
  62. }
  63. return v1;
  64. }
  65. void wyswietlanie(vector<typ> v1) {
  66. for (int i = 0; i < v1.size(); i++) {
  67. cout << v1[i] << " ";
  68. }
  69. }
  70.  
  71. typ przyblizenie(typ up, typ down){
  72. int q=floor(((double)up/(double)down)+0.5);
  73. return q;
  74. }
  75. vector<typ> iloczynWektorow(vector<typ> v, int wspolczynnik){
  76. vector<typ> pomnozony(v.size(),0);
  77. for(int i=0;i<v.size();i++){
  78. pomnozony[i]=v[i]*wspolczynnik;
  79. }
  80. return pomnozony;
  81. }
  82. typ szybkie_potegowanie(typ a, typ b){
  83. typ w = 1;
  84. while(b>0){
  85. if (b%2==1) {
  86. w=w*a;
  87. }
  88. a=a*a;
  89. b=b/2;
  90. }
  91. return w;
  92. }
  93.  
  94. typ prosty_generator(typ n){
  95. typ w1=0, a, k,x;
  96. w1=rand()%2;
  97. if(n==1){
  98. }else{
  99. for(int i=1;i<n;i++){
  100. w1=w1+szybkie_potegowanie(2,n-i)*(rand()%2);
  101. }
  102. }
  103. return w1;
  104. }
  105.  
  106. int main(){
  107. srand(time(NULL));
  108. vector< vector<typ> > wektory;
  109. int i, j , k=1, n,c;
  110. typ x;
  111. vector<typ> tmp;
  112. long double warunek;
  113. cout.precision(12);
  114. cout<<"Wybierz:\nWektory losowe-1\t Przyklad-2 \t Przyklad-3"<<endl;
  115. cin>>c;
  116. if(c==1){
  117. cout<<"Podaj rzad kraty: "<<endl;
  118. cin>>n;
  119. cout<<"Generator liczb calkowitych "<<endl<<endl;
  120. for(i=0;i<n;i++){
  121. int bits=0;
  122. cout<<"Podaj ilu bitowa ma byc wylosowana liczba: "<<endl;
  123. cin>>bits;
  124. cin.ignore();
  125. for(j=0;j<n;j++){
  126. tmp.push_back(prosty_generator(bits));
  127. }
  128. wektory.push_back(tmp);
  129. tmp.clear();
  130. bits=0;
  131. }
  132. }else if(c==2){
  133. n=2;
  134. // tmp.push_back(6513996);
  135. // tmp.push_back(6393464);
  136. tmp.push_back(66586820);
  137. tmp.push_back(65354729);
  138. wektory.push_back(tmp);
  139. tmp.clear();
  140. tmp.push_back(6513996);
  141. tmp.push_back(6393464);
  142. // tmp.push_back(66586820);
  143. // tmp.push_back(65354729);
  144. wektory.push_back(tmp);
  145. tmp.clear();
  146.  
  147. }else{
  148. n=6;
  149. tmp.push_back(19);
  150. tmp.push_back(2);
  151. tmp.push_back(32);
  152. tmp.push_back(46);
  153. tmp.push_back(3);
  154. tmp.push_back(33);
  155. wektory.push_back(tmp);
  156. tmp.clear();
  157. tmp.push_back(15);
  158. tmp.push_back(42);
  159. tmp.push_back(11);
  160. tmp.push_back(0);
  161. tmp.push_back(3);
  162. tmp.push_back(24);
  163. wektory.push_back(tmp);
  164. tmp.clear();
  165. tmp.push_back(43);
  166. tmp.push_back(15);
  167. tmp.push_back(0);
  168. tmp.push_back(24);
  169. tmp.push_back(4);
  170. tmp.push_back(16);
  171. wektory.push_back(tmp);
  172. tmp.clear();
  173. tmp.push_back(20);
  174. tmp.push_back(44);
  175. tmp.push_back(44);
  176. tmp.push_back(0);
  177. tmp.push_back(18);
  178. tmp.push_back(15);
  179. wektory.push_back(tmp);
  180. tmp.clear();
  181. tmp.push_back(0);
  182. tmp.push_back(48);
  183. tmp.push_back(35);
  184. tmp.push_back(16);
  185. tmp.push_back(31);
  186. tmp.push_back(31);
  187. wektory.push_back(tmp);
  188. tmp.clear();
  189. tmp.push_back(48);
  190. tmp.push_back(33);
  191. tmp.push_back(32);
  192. tmp.push_back(9);
  193. tmp.push_back(1);
  194. tmp.push_back(29);
  195. wektory.push_back(tmp);
  196. tmp.clear();
  197.  
  198. /*n=3;
  199. tmp.push_back(1);
  200. tmp.push_back(0);
  201. tmp.push_back(0);
  202. wektory.push_back(tmp);
  203. tmp.clear();
  204. tmp.push_back(4);
  205. tmp.push_back(2);
  206. tmp.push_back(15);
  207. wektory.push_back(tmp);
  208. tmp.clear();
  209. tmp.push_back(0);
  210. tmp.push_back(0);
  211. tmp.push_back(3);
  212. wektory.push_back(tmp);
  213. tmp.clear();*/
  214. }
  215.  
  216. vector< long double> vektor(n, 0.0);
  217. vector<vector<long double>> wspolczynnik(n,vektor);
  218. vector<typ> q(n,0);
  219.  
  220. cout<<"Wektory przed redukcja"<<endl;
  221. for(int i=0; i<wektory.size();i++) {
  222. cout<<"v"<<i+1<<": ";
  223. wyswietlanie(wektory[i]);
  224. cout<<endl;
  225. }
  226. //k=2;
  227. vector< typ > www;
  228. int min=0;
  229. for(i=0;i<n;i++){
  230. for(j=i+1;j<n;j++){
  231. if(norma(wektory[i])<norma(wektory[j])){
  232. min=j;
  233.  
  234. }
  235. }
  236. if(min!=0)swap(wektory[i],wektory[min]);
  237. min=0;
  238. }
  239.  
  240. while(k<n){
  241. for(j=k-1;j>=0;j--){
  242. q[j]=przyblizenie(iloczyn_skalarny(wektory[j], wektory[k]),norma(wektory[j]));
  243. wektory[k]=roznica(wektory[k],iloczynWektorow(wektory[j],q[j]));
  244. for(i=0;i<k;i++){
  245. wspolczynnik[k][i]=(long double) iloczyn_skalarny(wektory[k],wektory[i])/norma(wektory[i]);
  246. }
  247. }
  248. warunek = 0.75 - pow(wspolczynnik[k][k-1],2);
  249. if((norma(wektory[k]))>=(warunek*norma(wektory[k-1]))){
  250. k=k+1;
  251. }
  252. else{
  253. swap(wektory[k],wektory[k-1]);
  254. k = max(1, k-1);
  255. }
  256. }
  257. cout<<endl<<"Wektory po redukcji"<<endl;
  258. for(i=0;i<n;i++){
  259. cout<<"v"<<i+1<<": ";
  260. wyswietlanie(wektory[i]);
  261. cout<<endl;
  262. }
  263.  
  264. return 0;
  265. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement