Advertisement
Guest User

lll

a guest
Jun 23rd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1. #include<iostream>
  2. #include<time.h>
  3. #include<math.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6.  
  7. using namespace std;
  8. typedef long long int typ;
  9. typedef long double typD;
  10.  
  11. typD norm(vector<typ> v){
  12.     typD result=0;
  13.     int i;
  14.     for(i=0;i<v.size();i++){
  15.         result=result+v[i]*v[i];
  16.     }
  17.     result=sqrt(result);
  18.     return result;
  19. }
  20.  
  21. vector<typ> multVS(vector<typ> v1, typ a){
  22. vector<typ> result;
  23.     int i;
  24.     for (i=0;i<v1.size();i++){
  25.         result.push_back(v1.at(i)*a);
  26.     }
  27.     return result;
  28. }
  29.  
  30. typD multVV(vector<typ> v1, vector<typ> v2){
  31.     typ result=0;;
  32.     int i;
  33.     for (i=0;i<v1.size();i++){
  34.         result=result+v1[i]*v2[i];
  35.     }
  36.     return result;
  37. }
  38.  
  39. vector<typ> addVV(vector<typ> v1, vector<typ> v2){
  40.     vector<typ> result;
  41.     int i;
  42.     for (i=0;i<v1.size();i++){
  43.         result.push_back(v1.at(i)+v2.at(i));
  44.     }
  45.     return result;
  46. }
  47.  
  48. vector<typ> subVV(vector<typ> v1, vector<typ> v2){
  49.     vector<typ> result;
  50.     int i;
  51.    
  52.     for(i=0;i<v1.size();i++){
  53.         result.push_back((typ)v1[i]-v2[i]);
  54.     }
  55.     return result;
  56. }
  57. //////////////////////////////////////////////////////////////////////
  58.  
  59. vector< vector<typ> > LLL(vector< vector<typ> > v){
  60.     int i,j,k, kMax=1;
  61.     vector< vector<typ> > vOrt;
  62.     vector< vector<typ> > vR;
  63.     vector<typ> tmp;
  64.     typ up,down,u;
  65.     for(i=0;i<v.size();i++){
  66.         for (j=0;j<v.size();j++){
  67.             tmp.push_back(0);
  68.         }
  69.         vOrt.push_back(tmp);
  70.         vR.push_back(tmp);
  71.     }
  72.    
  73.         for(i=0;i<v.size();i++){
  74.         for (j=0;j<v.size();j++){
  75.             vR[i][j]=v[i][j];
  76.         }
  77.     }
  78.     int n=v.size();
  79.     vector<typ> B;
  80.     for(i=0;i<v.size();i++) B.push_back(0);
  81.     k=1;
  82.     vOrt.at(0)=v.at(0);
  83.  
  84.     while(k<=n){
  85.         for(j=0;j<k;j++){
  86.                 up=multVV(v.at(k),vOrt.at(j));
  87.                     cout<<"up: "<<up<<endl;
  88.                 down=pow(norm(vOrt.at(j)),2);
  89.                 u=up/down;
  90.                     cout<<"u: "<<u<<endl;
  91.                 vector<typ> tmpV = multVS(vOrt.at(j),u);
  92.                 vR.at(k)=subVV(v.at(k),tmpV);
  93.                 cout<<"vR("<<k<<")"<<vR.at(k)[0]<<", "<<vR.at(k)[1]<<", "<<vR.at(k)[2]<<endl;
  94.             }
  95.         typ left=pow(norm(vOrt.at(k)),2);
  96.         up = multVV(v.at(k),vOrt.at(k-1));
  97.         down=pow(norm(vOrt.at(k-1)),2);
  98.         u=up/down;
  99.         typ right1=(3/4)-pow(u,2);
  100.         typ right2=pow(norm(vOrt.at(k-1)),2);
  101.         typ right=right1*right2;
  102.         if(left>=right) k++;
  103.         else{
  104.             swap(v.at(k),v.at(k-1));
  105.             k=max(k-1,2);
  106.         }
  107. }
  108.     cout<<endl;
  109.  
  110.     return vR;
  111. }
  112.  
  113. main(){
  114.         vector<typ> a;
  115.         vector<typ> b;
  116.         vector<typ> c;
  117.        
  118.     a.push_back(1);
  119.     a.push_back(0);
  120.     a.push_back(0);
  121.    
  122.     b.push_back(4);
  123.     b.push_back(2);
  124.     b.push_back(15);
  125.    
  126.     c.push_back(0);
  127.     c.push_back(0);
  128.     c.push_back(3);
  129.  
  130. vector< vector<typ> > v;
  131. vector< vector<typ> > vR;
  132.  
  133. v.push_back(a);
  134. v.push_back(b);
  135. v.push_back(c);
  136. int i,j;
  137. for( i=0;i<v.size();i++){
  138.     cout<<"v("<<i<<"): ";
  139.     for( j=0;j<v.size();j++){
  140.         cout<<v[i][j]<<"  ";
  141.     }
  142.     cout<<endl;
  143. }
  144. vR=LLL(v);
  145. cout<<vR.size()<<endl;
  146. //for( i=0;i<v.size();i++){
  147. //  cout<<"vR("<<i<<"): ";
  148. //  for( j=0;j<vR.size();j++){
  149. //      cout<<vR[i][j]<<"  ";
  150. //  }
  151. //  cout<<endl;
  152. //}
  153.     return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement