1、输出一组数中素数的个数
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,a;
while(cin>>n)
{
int cnt=0;
while(n--)
{
cin>>a;
int i=2;
while(a%i&&i<=int(sqrt(double(a))))
{
i++;
}
if(i>int(sqrt(double(a))))
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
直接循环遍历就不会超时。
2、筛素数
const int MAXN = 1000010;
int prime[MAXN + 1];
void getPrime()
{
memset(prime, 0, sizeof(prime)); //初始化赋0,假设所有数都为素数
for(int i = 2; i <= MAXN / 2; i++) //筛素数从2开始,利用2是素数这一特性
{
if(!prime[i]) //如果数i是素数
prime[++prime[0]] = i; //记录素数个数++
for(int j = 1; j <= prime[0] && prime[j] <= MAXN / i; j++) //j<素数个数,防止重复删除非素数
{
prime[prime[j] * i] = 1; //一部分较小的素数倍数更改为不为素数
if(i % prime[j] == 0)
break; //i可以整除素数,跳出循环
}
}
}