题目:判断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;
}