温故知新

来源:互联网 发布:数据中的实时计算 编辑:程序博客网 时间:2024/04/20 04:59

1.最大公约数

两个数x1,x2 (x1>x2),他们之间的差y1=x1-x2

如有公约数u,那么会有下面的等式

x1 = a*u

x2 = b*u

x1 = c*u + y1

y1 = d*u

当d=1时,u最大

2.求100以内质数(答案少2)

  1. void CreateOdd(vector<unsigned int>& vl)
  2. {
  3.     vl.resize(49);
  4.     for(int i=3,k=0;i<100;i+=2,++k)
  5.     {
  6.         vl[k] = i;
  7.     }
  8. }
  9. void PrintList(ostream& osm, const vector<unsigned int>& vl)
  10. {
  11.     size_t nMaxCount = vl.size();
  12.     for(size_t i=0; i<nMaxCount; ++i)
  13.     {
  14.         osm << std::setw(2) << std::right << vl[i] << " ";
  15.         if ((i+1)%16==0) osm << "/n";
  16.     }
  17.     osm << "/n";
  18. }
  19. void foreclose(vector<unsigned int>& vl)
  20. {
  21.     size_t nMaxCount = vl.size();
  22.     size_t i=0;
  23.     size_t M=0;
  24.     size_t EX=0;
  25.     while((i<nMaxCount) && ((M=vl[i])!=0))
  26.     {
  27.         EX = i + i*M;
  28.         while ((EX+=M)<nMaxCount)vl[EX] = 0; 
  29.         ++i;
  30.     }
  31. }