【题目链接】
【题目考点】
1. 质数
素数又称为质数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。
判断一个大于等于2的正整数是质数的函数:
bool isPrime(int n)
{
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
【解题思路】
解法1:判断每个数是否是质数
写判断一个数是否是质数的函数。从2遍历到n,通过函数判断每个数字是否是质数。
解法2:筛法求质数表
通过筛法得到质数表后,统计从2~n一共有多少个质数
【题解代码】
解法1:判断每个数是否是质数
#include<bits/stdc++.h>
using namespace std;
//判断一个大于等于2的数是否是质数
bool isPrime(int n)
{
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
int main()
{
int n, s = 0;//s:质数个数
cin >> n;
for(int i = 2; i <= n; ++i)
{
if(isPrime(i))
s++;
}
cout << s;
return 0;
}
解法2:筛法求质数表
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, s = 0;//s:质数个数
bool isPrime[50005] = {};
cin >> n;
for(int i = 1; i <= n; ++i)
isPrime[i] = true;
isPrime[0] = isPrime[1] = false;
for(int i = 2; i <= n; ++i)
{
if(isPrime[i])
{
for(int j = i*2; j <= n; j += i)
isPrime[j] = false;
}
}
for(int i = 2; i <= n; ++i)
{
if(isPrime[i])
s++;
}
cout << s;
return 0;
}