题目描述
给定一个正整数 N,请你输出 N 以内(不包含 �N)的质数以及质数的个数。
输入描述
输入一行,包含一个正整数1≤N≤10^3
输出描述
共两行。
第 11 行包含若干个素数,每两个素数之间用一个空格隔开,素数从小到大输出。
第 22 行包含一个整数,表示N以内质数的个数。
输入输出样例
示例
输入
10
输出
2 3 5 7
4
运行限制
最大运行时间:1s
最大运行内存: 128M
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int N,num=0,i,j;
cin >> N;
for (i = 2; i < N; i++) {
int flag = 0;
for(j=2;j<=sqrt(i);j++)
if (i % j == 0) {
flag = 1;
break;
}
if (!flag)
{
cout << i << " ";
num++;
}
}
cout << endl << num;
return 0;
}
埃氏筛可用于处理规模约n=10^7的问题
#include <bits/stdc++.h>
using namespace std;
const int N=1e7;
bool v[N];
int prime[N];
int xuan(int n)
{
for(int i=1;i<=n;i++)
{
v[i]=0;
}
for(int i=2;i<=sqrt(n);i++)
{
if(!v[i])
{
for(int j=i*i;j<=n;j+=i)
{
v[j]=1;
}
}
}
int k=0;
for(int i=2;i<=n;i++)
{
if(!v[i])
{
prime[k++]=i;
}
}
return k;
}
int main()
{
int n;
cin>>n;
int k=xuan(n-1);
for(int i=0;i<k;i++)
{
cout<<prime[i]<<" ";
}
cout<<endl;
cout<<k;
return 0;
}