求100以内的素数是许多编程初学者的必会的技能,具体方法有很多,这里我们用筛选法来求。
筛选法的意思就是,将非素数全部筛选出来,将其赋值为0,那么剩下的就全部都是素数了,具体步骤如下:
- 第一步,创建判断函数,判断输入的数是否为素数,不是则返回0,是则返回1;
- 第二步,创建输出函数,先创建容量为101的数组并将其全部赋值为0,这样可以把1-100按顺序显示,便于理解。我们都知道1是特殊的素数,所以我们直接从2开始循环,直到99,把每个元素赋值为自己的序号值,即arr[2]=2,arr[3]=3,...,arr[99]=99以此类推。再利用判断函数对每一个数进行判断,是否为素数,若判定为非素数,则将其重新赋值为0,经过循环后,剩下来非0的所有数就都是非素数了。最后再将值不为0的所有元素全部输出,即为100以内的全部素数;
- 最后在主函数中输出。
应该注意的是,在判断是否为素数时,我最开始写的是k<sqrt(x),后来发现这样漏掉了一些平方数4,9,25和49,所以我又对函数进行了更改,改成了k<=sqrt(x),结果才正确输出了。
完整代码如下:
#include<iostream>
#include<math.h>
using namespace std;
int is_prime(int x) // 判断是否为素数
{
for (int k = 2; k <= sqrt(x); k++)
{
if (x%k == 0)
return 0; //不是素数
}
return 1; //是素数
}
void get_prime() //输出100以内素数
{
int arr[101] = { 0 };
for (int i = 2; i < 100; i++)
{
arr[i] = i; //从2到99,令每一个元素等于自己的序号
}
for (int j = 2; j < 100; j++)
{
if (is_prime(arr[j]) == 0)
arr[j] = 0; //不是素数则将其标为0
}
for (int m = 2; m < 100; m++)
{
if (arr[m] != 0)
cout << arr[m] <<" ";
}
}
int main()
{
get_prime();
system("pause");
return 0;
}