题目:判断101-200之间有多少个素数,并输出所有素数。 

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 
则表明此数不是素数,反之是素数。

 

//连续整除法求解素数

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
int main()
{
  int i, j, count = 0;
 
  for(i = 101; i <= 200; i++)
  {
    for(j = 2; j <= sqrt(i); j++)
    {
      if( i % j == 0)
      {
        break;
      }
    }
    if(j > sqrt(i))
    {
      count++;
      cout << setw(5) << i;
      if(count % 5 == 0)
      {
        cout << endl;
      }
    }
  }
  cout << endl << "素数总个数为:" << count <<endl;
 
  return 0;
}
 
 
//Sieve筛选法求素数
#include <iostream>
#include <cmath>
#include<iomanip>
using namespace std;

void setSieveElements(int *SieveElements, int size) // 0-size 设置待筛选数组
{
  for(int i = 0; i <= size; ++i)
  {
    SieveElements[i] = i;
  }
}

void getSieveElemets(int *SieveElements, int SieveLimit, int size)
{
  int i, j = 0;
  for(i = 2; i < SieveLimit; ++i)
  {
    if(SieveElements[i] != 0) //筛选,0标记非素数
    {
      j = i * i;
    }
    while (j <= size)
    {
      SieveElements[j] = 0;
      j += i;
    }
  }
}

void print(const int *SieveElements, int size)
{
  int count = 0;
  for(int i = 0; i <= size; ++i)
  {
    if(SieveElements[i] >= 101) //计数、输出101-200之间的素数
    {
      count++;
      cout << setw(5) << SieveElements[i];
      if(count % 5 == 0)
      {
        cout << endl;
      }
    }
  }
  cout << endl << "素数总个数为:" << count << endl;
}


int main()
{
  const int size = 200;
  int SieveElements[size + 1];
  const int SieveLimit = (int) sqrt(size);

  setSieveElements(SieveElements, size);
  getSieveElemets(SieveElements, SieveLimit, size);
  print(SieveElements, size);

  return 0;
}

 
posted on 2015-04-17 15:38  凡尘微末  阅读(233)  评论(0编辑  收藏  举报